diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.fi.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.fi.png
new file mode 100644
index 00000000..1ba4f5c7
Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.fi.png differ
diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.he.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.he.png
new file mode 100644
index 00000000..1ba4f5c7
Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.he.png differ
diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.nl.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.nl.png
new file mode 100644
index 00000000..1ba4f5c7
Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.nl.png differ
diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.fi.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.fi.png
new file mode 100644
index 00000000..3cac91bb
Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.fi.png differ
diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.he.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.he.png
new file mode 100644
index 00000000..3cac91bb
Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.he.png differ
diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.nl.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.nl.png
new file mode 100644
index 00000000..3cac91bb
Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.nl.png differ
diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.fi.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.fi.png
new file mode 100644
index 00000000..967e6539
Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.fi.png differ
diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.he.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.he.png
new file mode 100644
index 00000000..967e6539
Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.he.png differ
diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.nl.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.nl.png
new file mode 100644
index 00000000..967e6539
Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.nl.png differ
diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.fi.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.fi.png
new file mode 100644
index 00000000..247c1dd6
Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.fi.png differ
diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.he.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.he.png
new file mode 100644
index 00000000..247c1dd6
Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.he.png differ
diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.nl.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.nl.png
new file mode 100644
index 00000000..247c1dd6
Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.nl.png differ
diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.fi.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.fi.png
new file mode 100644
index 00000000..e89d81c4
Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.fi.png differ
diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.he.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.he.png
new file mode 100644
index 00000000..e89d81c4
Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.he.png differ
diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.nl.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.nl.png
new file mode 100644
index 00000000..e89d81c4
Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.nl.png differ
diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.fi.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.fi.png
new file mode 100644
index 00000000..0237836d
Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.fi.png differ
diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.he.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.he.png
new file mode 100644
index 00000000..0237836d
Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.he.png differ
diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.nl.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.nl.png
new file mode 100644
index 00000000..0237836d
Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.nl.png differ
diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.fi.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.fi.png
new file mode 100644
index 00000000..4229fee0
Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.fi.png differ
diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.he.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.he.png
new file mode 100644
index 00000000..4229fee0
Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.he.png differ
diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.nl.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.nl.png
new file mode 100644
index 00000000..4229fee0
Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.nl.png differ
diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.fi.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.fi.png
new file mode 100644
index 00000000..9b503ac8
Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.fi.png differ
diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.he.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.he.png
new file mode 100644
index 00000000..9b503ac8
Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.he.png differ
diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.nl.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.nl.png
new file mode 100644
index 00000000..9b503ac8
Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.nl.png differ
diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.fi.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.fi.png
new file mode 100644
index 00000000..c98b7aaf
Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.fi.png differ
diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.he.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.he.png
new file mode 100644
index 00000000..c98b7aaf
Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.he.png differ
diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.nl.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.nl.png
new file mode 100644
index 00000000..c98b7aaf
Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.nl.png differ
diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.fi.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.fi.png
new file mode 100644
index 00000000..706f83bc
Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.fi.png differ
diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.he.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.he.png
new file mode 100644
index 00000000..706f83bc
Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.he.png differ
diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.nl.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.nl.png
new file mode 100644
index 00000000..706f83bc
Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.nl.png differ
diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.fi.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.fi.png
new file mode 100644
index 00000000..76bec4da
Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.fi.png differ
diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.he.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.he.png
new file mode 100644
index 00000000..76bec4da
Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.he.png differ
diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.nl.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.nl.png
new file mode 100644
index 00000000..76bec4da
Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.nl.png differ
diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.fi.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.fi.png
new file mode 100644
index 00000000..b49060a2
Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.fi.png differ
diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.he.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.he.png
new file mode 100644
index 00000000..b49060a2
Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.he.png differ
diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.nl.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.nl.png
new file mode 100644
index 00000000..b49060a2
Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.nl.png differ
diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.fi.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.fi.png
new file mode 100644
index 00000000..3ca064d5
Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.fi.png differ
diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.he.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.he.png
new file mode 100644
index 00000000..3ca064d5
Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.he.png differ
diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.nl.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.nl.png
new file mode 100644
index 00000000..3ca064d5
Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.nl.png differ
diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.fi.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.fi.png
new file mode 100644
index 00000000..1f5f2412
Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.fi.png differ
diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.he.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.he.png
new file mode 100644
index 00000000..1f5f2412
Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.he.png differ
diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.nl.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.nl.png
new file mode 100644
index 00000000..1f5f2412
Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.nl.png differ
diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.fi.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.fi.png
new file mode 100644
index 00000000..2953cea1
Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.fi.png differ
diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.he.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.he.png
new file mode 100644
index 00000000..2953cea1
Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.he.png differ
diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.nl.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.nl.png
new file mode 100644
index 00000000..2953cea1
Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.nl.png differ
diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.fi.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.fi.png
new file mode 100644
index 00000000..2ce7dedf
Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.fi.png differ
diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.he.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.he.png
new file mode 100644
index 00000000..2ce7dedf
Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.he.png differ
diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.nl.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.nl.png
new file mode 100644
index 00000000..2ce7dedf
Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.nl.png differ
diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.fi.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.fi.png
new file mode 100644
index 00000000..157c08c6
Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.fi.png differ
diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.he.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.he.png
new file mode 100644
index 00000000..157c08c6
Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.he.png differ
diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.nl.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.nl.png
new file mode 100644
index 00000000..157c08c6
Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.nl.png differ
diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.fi.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.fi.png
new file mode 100644
index 00000000..031361a6
Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.fi.png differ
diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.he.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.he.png
new file mode 100644
index 00000000..031361a6
Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.he.png differ
diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.nl.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.nl.png
new file mode 100644
index 00000000..031361a6
Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.nl.png differ
diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.fi.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.fi.png
new file mode 100644
index 00000000..3a43eb23
Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.fi.png differ
diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.he.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.he.png
new file mode 100644
index 00000000..3a43eb23
Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.he.png differ
diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.nl.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.nl.png
new file mode 100644
index 00000000..3a43eb23
Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.nl.png differ
diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.fi.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.fi.png
new file mode 100644
index 00000000..7c9552e3
Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.fi.png differ
diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.he.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.he.png
new file mode 100644
index 00000000..7c9552e3
Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.he.png differ
diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.nl.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.nl.png
new file mode 100644
index 00000000..7c9552e3
Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.nl.png differ
diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.fi.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.fi.png
new file mode 100644
index 00000000..78f695b7
Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.fi.png differ
diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.he.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.he.png
new file mode 100644
index 00000000..78f695b7
Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.he.png differ
diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.nl.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.nl.png
new file mode 100644
index 00000000..78f695b7
Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.nl.png differ
diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.fi.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.fi.png
new file mode 100644
index 00000000..77f563fb
Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.fi.png differ
diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.he.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.he.png
new file mode 100644
index 00000000..77f563fb
Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.he.png differ
diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.nl.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.nl.png
new file mode 100644
index 00000000..77f563fb
Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.nl.png differ
diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.fi.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.fi.png
new file mode 100644
index 00000000..8dccd514
Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.fi.png differ
diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.he.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.he.png
new file mode 100644
index 00000000..8dccd514
Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.he.png differ
diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.nl.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.nl.png
new file mode 100644
index 00000000..8dccd514
Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.nl.png differ
diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.fi.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.fi.png
new file mode 100644
index 00000000..b75e015e
Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.fi.png differ
diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.he.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.he.png
new file mode 100644
index 00000000..b75e015e
Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.he.png differ
diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.nl.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.nl.png
new file mode 100644
index 00000000..b75e015e
Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.nl.png differ
diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.fi.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.fi.png
new file mode 100644
index 00000000..5bfed282
Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.fi.png differ
diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.he.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.he.png
new file mode 100644
index 00000000..5bfed282
Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.he.png differ
diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.nl.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.nl.png
new file mode 100644
index 00000000..5bfed282
Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.nl.png differ
diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.fi.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.fi.png
new file mode 100644
index 00000000..34ca765c
Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.fi.png differ
diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.he.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.he.png
new file mode 100644
index 00000000..34ca765c
Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.he.png differ
diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.nl.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.nl.png
new file mode 100644
index 00000000..34ca765c
Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.nl.png differ
diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.fi.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.fi.png
new file mode 100644
index 00000000..d1f7bc09
Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.fi.png differ
diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.he.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.he.png
new file mode 100644
index 00000000..d1f7bc09
Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.he.png differ
diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.nl.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.nl.png
new file mode 100644
index 00000000..d1f7bc09
Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.nl.png differ
diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.fi.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.fi.png
new file mode 100644
index 00000000..c215b446
Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.fi.png differ
diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.he.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.he.png
new file mode 100644
index 00000000..c215b446
Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.he.png differ
diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.nl.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.nl.png
new file mode 100644
index 00000000..c215b446
Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.nl.png differ
diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.fi.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.fi.png
new file mode 100644
index 00000000..63f58daa
Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.fi.png differ
diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.he.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.he.png
new file mode 100644
index 00000000..63f58daa
Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.he.png differ
diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.nl.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.nl.png
new file mode 100644
index 00000000..63f58daa
Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.nl.png differ
diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.fi.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.fi.png
new file mode 100644
index 00000000..3eb38501
Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.fi.png differ
diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.he.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.he.png
new file mode 100644
index 00000000..3eb38501
Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.he.png differ
diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.nl.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.nl.png
new file mode 100644
index 00000000..3eb38501
Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.nl.png differ
diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.fi.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.fi.png
new file mode 100644
index 00000000..4f960870
Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.fi.png differ
diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.he.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.he.png
new file mode 100644
index 00000000..4f960870
Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.he.png differ
diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.nl.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.nl.png
new file mode 100644
index 00000000..4f960870
Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.nl.png differ
diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.fi.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.fi.png
new file mode 100644
index 00000000..ca5b5882
Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.fi.png differ
diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.he.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.he.png
new file mode 100644
index 00000000..ca5b5882
Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.he.png differ
diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.nl.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.nl.png
new file mode 100644
index 00000000..ca5b5882
Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.nl.png differ
diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.fi.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.fi.png
new file mode 100644
index 00000000..2c3440cd
Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.fi.png differ
diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.he.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.he.png
new file mode 100644
index 00000000..2c3440cd
Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.he.png differ
diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.nl.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.nl.png
new file mode 100644
index 00000000..2c3440cd
Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.nl.png differ
diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.fi.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.fi.png
new file mode 100644
index 00000000..5294a9dc
Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.fi.png differ
diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.he.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.he.png
new file mode 100644
index 00000000..5294a9dc
Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.he.png differ
diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.nl.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.nl.png
new file mode 100644
index 00000000..5294a9dc
Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.nl.png differ
diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.fi.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.fi.png
new file mode 100644
index 00000000..912ac4ca
Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.fi.png differ
diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.he.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.he.png
new file mode 100644
index 00000000..912ac4ca
Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.he.png differ
diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.nl.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.nl.png
new file mode 100644
index 00000000..912ac4ca
Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.nl.png differ
diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.fi.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.fi.png
new file mode 100644
index 00000000..8e47de7d
Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.fi.png differ
diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.he.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.he.png
new file mode 100644
index 00000000..8e47de7d
Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.he.png differ
diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.nl.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.nl.png
new file mode 100644
index 00000000..8e47de7d
Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.nl.png differ
diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.fi.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.fi.png
new file mode 100644
index 00000000..b3c98d83
Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.fi.png differ
diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.he.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.he.png
new file mode 100644
index 00000000..b3c98d83
Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.he.png differ
diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.nl.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.nl.png
new file mode 100644
index 00000000..b3c98d83
Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.nl.png differ
diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.fi.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.fi.png
new file mode 100644
index 00000000..1d494613
Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.fi.png differ
diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.he.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.he.png
new file mode 100644
index 00000000..1d494613
Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.he.png differ
diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.nl.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.nl.png
new file mode 100644
index 00000000..1d494613
Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.nl.png differ
diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.fi.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.fi.png
new file mode 100644
index 00000000..47ced39a
Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.fi.png differ
diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.he.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.he.png
new file mode 100644
index 00000000..47ced39a
Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.he.png differ
diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.nl.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.nl.png
new file mode 100644
index 00000000..47ced39a
Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.nl.png differ
diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.fi.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.fi.png
new file mode 100644
index 00000000..88d5c896
Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.fi.png differ
diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.he.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.he.png
new file mode 100644
index 00000000..88d5c896
Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.he.png differ
diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.nl.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.nl.png
new file mode 100644
index 00000000..88d5c896
Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.nl.png differ
diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.fi.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.fi.png
new file mode 100644
index 00000000..e0706533
Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.fi.png differ
diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.he.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.he.png
new file mode 100644
index 00000000..e0706533
Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.he.png differ
diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.nl.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.nl.png
new file mode 100644
index 00000000..e0706533
Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.nl.png differ
diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.fi.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.fi.png
new file mode 100644
index 00000000..a1f17249
Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.fi.png differ
diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.he.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.he.png
new file mode 100644
index 00000000..a1f17249
Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.he.png differ
diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.nl.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.nl.png
new file mode 100644
index 00000000..a1f17249
Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.nl.png differ
diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.fi.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.fi.png
new file mode 100644
index 00000000..3adc61ef
Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.fi.png differ
diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.he.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.he.png
new file mode 100644
index 00000000..3adc61ef
Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.he.png differ
diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.nl.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.nl.png
new file mode 100644
index 00000000..3adc61ef
Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.nl.png differ
diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.fi.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.fi.png
new file mode 100644
index 00000000..1c3c8d53
Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.fi.png differ
diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.he.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.he.png
new file mode 100644
index 00000000..1c3c8d53
Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.he.png differ
diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.nl.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.nl.png
new file mode 100644
index 00000000..1c3c8d53
Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.nl.png differ
diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.fi.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.fi.jpg
new file mode 100644
index 00000000..0f4a9a38
Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.fi.jpg differ
diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.he.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.he.jpg
new file mode 100644
index 00000000..0f4a9a38
Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.he.jpg differ
diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.nl.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.nl.jpg
new file mode 100644
index 00000000..0f4a9a38
Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.nl.jpg differ
diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.fi.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.fi.png
new file mode 100644
index 00000000..32dab60c
Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.fi.png differ
diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.he.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.he.png
new file mode 100644
index 00000000..32dab60c
Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.he.png differ
diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.nl.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.nl.png
new file mode 100644
index 00000000..32dab60c
Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.nl.png differ
diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.fi.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.fi.png
new file mode 100644
index 00000000..78e9b675
Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.fi.png differ
diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.he.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.he.png
new file mode 100644
index 00000000..78e9b675
Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.he.png differ
diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.nl.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.nl.png
new file mode 100644
index 00000000..78e9b675
Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.nl.png differ
diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.fi.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.fi.png
new file mode 100644
index 00000000..fb87dd71
Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.fi.png differ
diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.he.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.he.png
new file mode 100644
index 00000000..fb87dd71
Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.he.png differ
diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.nl.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.nl.png
new file mode 100644
index 00000000..fb87dd71
Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.nl.png differ
diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.fi.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.fi.png
new file mode 100644
index 00000000..acaa9a02
Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.fi.png differ
diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.he.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.he.png
new file mode 100644
index 00000000..acaa9a02
Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.he.png differ
diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.nl.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.nl.png
new file mode 100644
index 00000000..acaa9a02
Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.nl.png differ
diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.fi.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.fi.png
new file mode 100644
index 00000000..b6afaa8a
Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.fi.png differ
diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.he.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.he.png
new file mode 100644
index 00000000..b6afaa8a
Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.he.png differ
diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.nl.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.nl.png
new file mode 100644
index 00000000..b6afaa8a
Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.nl.png differ
diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.fi.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.fi.png
new file mode 100644
index 00000000..18f92ede
Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.fi.png differ
diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.he.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.he.png
new file mode 100644
index 00000000..18f92ede
Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.he.png differ
diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.nl.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.nl.png
new file mode 100644
index 00000000..18f92ede
Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.nl.png differ
diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.fi.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.fi.png
new file mode 100644
index 00000000..e1eb6df0
Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.fi.png differ
diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.he.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.he.png
new file mode 100644
index 00000000..e1eb6df0
Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.he.png differ
diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.nl.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.nl.png
new file mode 100644
index 00000000..e1eb6df0
Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.nl.png differ
diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.fi.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.fi.png
new file mode 100644
index 00000000..dfcfde45
Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.fi.png differ
diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.he.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.he.png
new file mode 100644
index 00000000..dfcfde45
Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.he.png differ
diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.nl.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.nl.png
new file mode 100644
index 00000000..dfcfde45
Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.nl.png differ
diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.fi.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.fi.png
new file mode 100644
index 00000000..44af1896
Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.fi.png differ
diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.he.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.he.png
new file mode 100644
index 00000000..44af1896
Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.he.png differ
diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.nl.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.nl.png
new file mode 100644
index 00000000..44af1896
Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.nl.png differ
diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.fi.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.fi.png
new file mode 100644
index 00000000..6d749e6c
Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.fi.png differ
diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.he.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.he.png
new file mode 100644
index 00000000..6d749e6c
Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.he.png differ
diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.nl.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.nl.png
new file mode 100644
index 00000000..6d749e6c
Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.nl.png differ
diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.fi.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.fi.png
new file mode 100644
index 00000000..7485e36c
Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.fi.png differ
diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.he.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.he.png
new file mode 100644
index 00000000..7485e36c
Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.he.png differ
diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.nl.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.nl.png
new file mode 100644
index 00000000..7485e36c
Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.nl.png differ
diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.fi.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.fi.png
new file mode 100644
index 00000000..0f499097
Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.fi.png differ
diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.he.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.he.png
new file mode 100644
index 00000000..0f499097
Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.he.png differ
diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.nl.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.nl.png
new file mode 100644
index 00000000..0f499097
Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.nl.png differ
diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.fi.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.fi.png
new file mode 100644
index 00000000..710c440c
Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.fi.png differ
diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.he.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.he.png
new file mode 100644
index 00000000..710c440c
Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.he.png differ
diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.nl.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.nl.png
new file mode 100644
index 00000000..710c440c
Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.nl.png differ
diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.fi.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.fi.png
new file mode 100644
index 00000000..24cecced
Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.fi.png differ
diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.he.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.he.png
new file mode 100644
index 00000000..24cecced
Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.he.png differ
diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.nl.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.nl.png
new file mode 100644
index 00000000..24cecced
Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.nl.png differ
diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.fi.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.fi.png
new file mode 100644
index 00000000..b36025d9
Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.fi.png differ
diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.he.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.he.png
new file mode 100644
index 00000000..b36025d9
Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.he.png differ
diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.nl.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.nl.png
new file mode 100644
index 00000000..b36025d9
Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.nl.png differ
diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.fi.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.fi.png
new file mode 100644
index 00000000..b21a4bed
Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.fi.png differ
diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.he.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.he.png
new file mode 100644
index 00000000..b21a4bed
Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.he.png differ
diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.nl.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.nl.png
new file mode 100644
index 00000000..b21a4bed
Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.nl.png differ
diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.fi.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.fi.png
new file mode 100644
index 00000000..8da6f9a4
Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.fi.png differ
diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.he.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.he.png
new file mode 100644
index 00000000..8da6f9a4
Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.he.png differ
diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.nl.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.nl.png
new file mode 100644
index 00000000..8da6f9a4
Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.nl.png differ
diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.fi.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.fi.jpg
new file mode 100644
index 00000000..437f3d07
Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.fi.jpg differ
diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.he.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.he.jpg
new file mode 100644
index 00000000..437f3d07
Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.he.jpg differ
diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.nl.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.nl.jpg
new file mode 100644
index 00000000..437f3d07
Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.nl.jpg differ
diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.fi.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.fi.png
new file mode 100644
index 00000000..cc61fb13
Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.fi.png differ
diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.he.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.he.png
new file mode 100644
index 00000000..cc61fb13
Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.he.png differ
diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.nl.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.nl.png
new file mode 100644
index 00000000..cc61fb13
Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.nl.png differ
diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.fi.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.fi.png
new file mode 100644
index 00000000..3472b1d9
Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.fi.png differ
diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.he.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.he.png
new file mode 100644
index 00000000..3472b1d9
Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.he.png differ
diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.nl.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.nl.png
new file mode 100644
index 00000000..3472b1d9
Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.nl.png differ
diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.fi.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.fi.png
new file mode 100644
index 00000000..0bbca602
Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.fi.png differ
diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.he.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.he.png
new file mode 100644
index 00000000..0bbca602
Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.he.png differ
diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.nl.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.nl.png
new file mode 100644
index 00000000..0bbca602
Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.nl.png differ
diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.fi.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.fi.png
new file mode 100644
index 00000000..b5775adc
Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.fi.png differ
diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.he.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.he.png
new file mode 100644
index 00000000..b5775adc
Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.he.png differ
diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.nl.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.nl.png
new file mode 100644
index 00000000..b5775adc
Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.nl.png differ
diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.fi.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.fi.png
new file mode 100644
index 00000000..bc58477a
Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.fi.png differ
diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.he.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.he.png
new file mode 100644
index 00000000..bc58477a
Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.he.png differ
diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.nl.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.nl.png
new file mode 100644
index 00000000..bc58477a
Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.nl.png differ
diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.fi.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.fi.png
new file mode 100644
index 00000000..1b7a40f4
Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.fi.png differ
diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.he.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.he.png
new file mode 100644
index 00000000..1b7a40f4
Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.he.png differ
diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.nl.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.nl.png
new file mode 100644
index 00000000..1b7a40f4
Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.nl.png differ
diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.fi.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.fi.png
new file mode 100644
index 00000000..011b07a3
Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.fi.png differ
diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.he.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.he.png
new file mode 100644
index 00000000..011b07a3
Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.he.png differ
diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.nl.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.nl.png
new file mode 100644
index 00000000..011b07a3
Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.nl.png differ
diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.fi.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.fi.png
new file mode 100644
index 00000000..7f9d24ef
Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.fi.png differ
diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.he.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.he.png
new file mode 100644
index 00000000..7f9d24ef
Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.he.png differ
diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.nl.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.nl.png
new file mode 100644
index 00000000..7f9d24ef
Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.nl.png differ
diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.fi.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.fi.png
new file mode 100644
index 00000000..0c6a7067
Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.fi.png differ
diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.he.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.he.png
new file mode 100644
index 00000000..0c6a7067
Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.he.png differ
diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.nl.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.nl.png
new file mode 100644
index 00000000..0c6a7067
Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.nl.png differ
diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.fi.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.fi.png
new file mode 100644
index 00000000..8f7968a5
Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.fi.png differ
diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.he.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.he.png
new file mode 100644
index 00000000..8f7968a5
Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.he.png differ
diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.nl.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.nl.png
new file mode 100644
index 00000000..8f7968a5
Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.nl.png differ
diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.fi.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.fi.png
new file mode 100644
index 00000000..20c6036f
Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.fi.png differ
diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.he.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.he.png
new file mode 100644
index 00000000..20c6036f
Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.he.png differ
diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.nl.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.nl.png
new file mode 100644
index 00000000..20c6036f
Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.nl.png differ
diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.fi.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.fi.png
new file mode 100644
index 00000000..f077b6e9
Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.fi.png differ
diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.he.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.he.png
new file mode 100644
index 00000000..f077b6e9
Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.he.png differ
diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.nl.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.nl.png
new file mode 100644
index 00000000..f077b6e9
Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.nl.png differ
diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.fi.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.fi.png
new file mode 100644
index 00000000..484206d5
Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.fi.png differ
diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.he.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.he.png
new file mode 100644
index 00000000..484206d5
Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.he.png differ
diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.nl.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.nl.png
new file mode 100644
index 00000000..484206d5
Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.nl.png differ
diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.fi.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.fi.png
new file mode 100644
index 00000000..9fa156e2
Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.fi.png differ
diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.he.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.he.png
new file mode 100644
index 00000000..9fa156e2
Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.he.png differ
diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.nl.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.nl.png
new file mode 100644
index 00000000..9fa156e2
Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.nl.png differ
diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.fi.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.fi.png
new file mode 100644
index 00000000..b0813972
Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.fi.png differ
diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.he.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.he.png
new file mode 100644
index 00000000..b0813972
Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.he.png differ
diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.nl.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.nl.png
new file mode 100644
index 00000000..b0813972
Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.nl.png differ
diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.fi.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.fi.png
new file mode 100644
index 00000000..4f2da8dc
Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.fi.png differ
diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.he.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.he.png
new file mode 100644
index 00000000..4f2da8dc
Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.he.png differ
diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.nl.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.nl.png
new file mode 100644
index 00000000..4f2da8dc
Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.nl.png differ
diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.fi.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.fi.png
new file mode 100644
index 00000000..8ae3904c
Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.fi.png differ
diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.he.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.he.png
new file mode 100644
index 00000000..8ae3904c
Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.he.png differ
diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.nl.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.nl.png
new file mode 100644
index 00000000..8ae3904c
Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.nl.png differ
diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.fi.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.fi.png
new file mode 100644
index 00000000..ea5cbe30
Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.fi.png differ
diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.he.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.he.png
new file mode 100644
index 00000000..ea5cbe30
Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.he.png differ
diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.nl.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.nl.png
new file mode 100644
index 00000000..ea5cbe30
Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.nl.png differ
diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.fi.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.fi.png
new file mode 100644
index 00000000..eab9fb03
Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.fi.png differ
diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.he.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.he.png
new file mode 100644
index 00000000..eab9fb03
Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.he.png differ
diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.nl.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.nl.png
new file mode 100644
index 00000000..eab9fb03
Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.nl.png differ
diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.fi.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.fi.png
new file mode 100644
index 00000000..c49c0459
Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.fi.png differ
diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.he.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.he.png
new file mode 100644
index 00000000..c49c0459
Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.he.png differ
diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.nl.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.nl.png
new file mode 100644
index 00000000..c49c0459
Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.nl.png differ
diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.fi.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.fi.png
new file mode 100644
index 00000000..127b0257
Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.fi.png differ
diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.he.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.he.png
new file mode 100644
index 00000000..127b0257
Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.he.png differ
diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.nl.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.nl.png
new file mode 100644
index 00000000..127b0257
Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.nl.png differ
diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.fi.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.fi.png
new file mode 100644
index 00000000..0b528799
Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.fi.png differ
diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.he.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.he.png
new file mode 100644
index 00000000..0b528799
Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.he.png differ
diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.nl.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.nl.png
new file mode 100644
index 00000000..0b528799
Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.nl.png differ
diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.fi.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.fi.png
new file mode 100644
index 00000000..e5b04c65
Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.fi.png differ
diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.he.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.he.png
new file mode 100644
index 00000000..e5b04c65
Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.he.png differ
diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.nl.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.nl.png
new file mode 100644
index 00000000..e5b04c65
Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.nl.png differ
diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.fi.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.fi.png
new file mode 100644
index 00000000..46543926
Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.fi.png differ
diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.he.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.he.png
new file mode 100644
index 00000000..46543926
Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.he.png differ
diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.nl.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.nl.png
new file mode 100644
index 00000000..46543926
Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.nl.png differ
diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.fi.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.fi.png
new file mode 100644
index 00000000..46e99668
Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.fi.png differ
diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.he.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.he.png
new file mode 100644
index 00000000..46e99668
Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.he.png differ
diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.nl.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.nl.png
new file mode 100644
index 00000000..46e99668
Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.nl.png differ
diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.fi.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.fi.png
new file mode 100644
index 00000000..c012d47d
Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.fi.png differ
diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.he.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.he.png
new file mode 100644
index 00000000..c012d47d
Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.he.png differ
diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.nl.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.nl.png
new file mode 100644
index 00000000..c012d47d
Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.nl.png differ
diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.fi.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.fi.png
new file mode 100644
index 00000000..fa44061a
Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.fi.png differ
diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.he.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.he.png
new file mode 100644
index 00000000..fa44061a
Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.he.png differ
diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.nl.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.nl.png
new file mode 100644
index 00000000..fa44061a
Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.nl.png differ
diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.fi.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.fi.png
new file mode 100644
index 00000000..e499b2fd
Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.fi.png differ
diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.he.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.he.png
new file mode 100644
index 00000000..e499b2fd
Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.he.png differ
diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.nl.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.nl.png
new file mode 100644
index 00000000..e499b2fd
Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.nl.png differ
diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.fi.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.fi.png
new file mode 100644
index 00000000..66e9927a
Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.fi.png differ
diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.he.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.he.png
new file mode 100644
index 00000000..66e9927a
Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.he.png differ
diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.nl.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.nl.png
new file mode 100644
index 00000000..66e9927a
Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.nl.png differ
diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.fi.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.fi.png
new file mode 100644
index 00000000..e512cf63
Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.fi.png differ
diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.he.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.he.png
new file mode 100644
index 00000000..e512cf63
Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.he.png differ
diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.nl.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.nl.png
new file mode 100644
index 00000000..e512cf63
Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.nl.png differ
diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.fi.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.fi.png
new file mode 100644
index 00000000..89e41b8a
Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.fi.png differ
diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.he.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.he.png
new file mode 100644
index 00000000..89e41b8a
Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.he.png differ
diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.nl.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.nl.png
new file mode 100644
index 00000000..89e41b8a
Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.nl.png differ
diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.fi.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.fi.png
new file mode 100644
index 00000000..257c3e55
Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.fi.png differ
diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.he.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.he.png
new file mode 100644
index 00000000..257c3e55
Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.he.png differ
diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.nl.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.nl.png
new file mode 100644
index 00000000..257c3e55
Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.nl.png differ
diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.fi.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.fi.png
new file mode 100644
index 00000000..85a581ed
Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.fi.png differ
diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.he.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.he.png
new file mode 100644
index 00000000..85a581ed
Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.he.png differ
diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.nl.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.nl.png
new file mode 100644
index 00000000..85a581ed
Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.nl.png differ
diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.fi.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.fi.png
new file mode 100644
index 00000000..c07f67c3
Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.fi.png differ
diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.he.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.he.png
new file mode 100644
index 00000000..c07f67c3
Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.he.png differ
diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.nl.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.nl.png
new file mode 100644
index 00000000..c07f67c3
Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.nl.png differ
diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.fi.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.fi.png
new file mode 100644
index 00000000..c598913b
Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.fi.png differ
diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.he.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.he.png
new file mode 100644
index 00000000..c598913b
Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.he.png differ
diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.nl.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.nl.png
new file mode 100644
index 00000000..c598913b
Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.nl.png differ
diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.fi.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.fi.png
new file mode 100644
index 00000000..a630a6f3
Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.fi.png differ
diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.he.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.he.png
new file mode 100644
index 00000000..a630a6f3
Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.he.png differ
diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.nl.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.nl.png
new file mode 100644
index 00000000..a630a6f3
Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.nl.png differ
diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.fi.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.fi.png
new file mode 100644
index 00000000..f63ad48d
Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.fi.png differ
diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.he.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.he.png
new file mode 100644
index 00000000..f63ad48d
Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.he.png differ
diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.nl.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.nl.png
new file mode 100644
index 00000000..f63ad48d
Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.nl.png differ
diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.fi.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.fi.png
new file mode 100644
index 00000000..73c0aea6
Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.fi.png differ
diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.he.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.he.png
new file mode 100644
index 00000000..73c0aea6
Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.he.png differ
diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.nl.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.nl.png
new file mode 100644
index 00000000..73c0aea6
Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.nl.png differ
diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.fi.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.fi.png
new file mode 100644
index 00000000..0768efbc
Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.fi.png differ
diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.he.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.he.png
new file mode 100644
index 00000000..0768efbc
Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.he.png differ
diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.nl.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.nl.png
new file mode 100644
index 00000000..0768efbc
Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.nl.png differ
diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.fi.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.fi.png
new file mode 100644
index 00000000..a6c3afe8
Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.fi.png differ
diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.he.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.he.png
new file mode 100644
index 00000000..a6c3afe8
Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.he.png differ
diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.nl.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.nl.png
new file mode 100644
index 00000000..a6c3afe8
Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.nl.png differ
diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.fi.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.fi.png
new file mode 100644
index 00000000..eed10ecb
Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.fi.png differ
diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.he.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.he.png
new file mode 100644
index 00000000..eed10ecb
Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.he.png differ
diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.nl.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.nl.png
new file mode 100644
index 00000000..eed10ecb
Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.nl.png differ
diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.fi.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.fi.png
new file mode 100644
index 00000000..4c086050
Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.fi.png differ
diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.he.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.he.png
new file mode 100644
index 00000000..4c086050
Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.he.png differ
diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.nl.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.nl.png
new file mode 100644
index 00000000..4c086050
Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.nl.png differ
diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.fi.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.fi.png
new file mode 100644
index 00000000..9f641588
Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.fi.png differ
diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.he.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.he.png
new file mode 100644
index 00000000..9f641588
Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.he.png differ
diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.nl.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.nl.png
new file mode 100644
index 00000000..9f641588
Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.nl.png differ
diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.fi.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.fi.png
new file mode 100644
index 00000000..9404843f
Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.fi.png differ
diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.he.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.he.png
new file mode 100644
index 00000000..9404843f
Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.he.png differ
diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.nl.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.nl.png
new file mode 100644
index 00000000..9404843f
Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.nl.png differ
diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.fi.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.fi.png
new file mode 100644
index 00000000..9636ac68
Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.fi.png differ
diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.he.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.he.png
new file mode 100644
index 00000000..9636ac68
Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.he.png differ
diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.nl.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.nl.png
new file mode 100644
index 00000000..9636ac68
Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.nl.png differ
diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.fi.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.fi.png
new file mode 100644
index 00000000..38a2b35d
Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.fi.png differ
diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.he.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.he.png
new file mode 100644
index 00000000..38a2b35d
Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.he.png differ
diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.nl.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.nl.png
new file mode 100644
index 00000000..38a2b35d
Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.nl.png differ
diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.fi.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.fi.png
new file mode 100644
index 00000000..cd09e177
Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.fi.png differ
diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.he.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.he.png
new file mode 100644
index 00000000..cd09e177
Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.he.png differ
diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.nl.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.nl.png
new file mode 100644
index 00000000..cd09e177
Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.nl.png differ
diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.fi.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.fi.png
new file mode 100644
index 00000000..4cc4f4bc
Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.fi.png differ
diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.he.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.he.png
new file mode 100644
index 00000000..4cc4f4bc
Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.he.png differ
diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.nl.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.nl.png
new file mode 100644
index 00000000..4cc4f4bc
Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.nl.png differ
diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.fi.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.fi.png
new file mode 100644
index 00000000..33e03220
Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.fi.png differ
diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.he.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.he.png
new file mode 100644
index 00000000..33e03220
Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.he.png differ
diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.nl.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.nl.png
new file mode 100644
index 00000000..33e03220
Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.nl.png differ
diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.fi.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.fi.png
new file mode 100644
index 00000000..489d49e3
Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.fi.png differ
diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.he.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.he.png
new file mode 100644
index 00000000..489d49e3
Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.he.png differ
diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.nl.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.nl.png
new file mode 100644
index 00000000..489d49e3
Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.nl.png differ
diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.fi.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.fi.png
new file mode 100644
index 00000000..80b39b63
Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.fi.png differ
diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.he.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.he.png
new file mode 100644
index 00000000..80b39b63
Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.he.png differ
diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.nl.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.nl.png
new file mode 100644
index 00000000..80b39b63
Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.nl.png differ
diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.fi.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.fi.png
new file mode 100644
index 00000000..2404a4ce
Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.fi.png differ
diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.he.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.he.png
new file mode 100644
index 00000000..2404a4ce
Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.he.png differ
diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.nl.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.nl.png
new file mode 100644
index 00000000..2404a4ce
Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.nl.png differ
diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.fi.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.fi.png
new file mode 100644
index 00000000..f884cc81
Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.fi.png differ
diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.he.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.he.png
new file mode 100644
index 00000000..f884cc81
Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.he.png differ
diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.nl.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.nl.png
new file mode 100644
index 00000000..f884cc81
Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.nl.png differ
diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.fi.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.fi.png
new file mode 100644
index 00000000..9f649bd1
Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.fi.png differ
diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.he.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.he.png
new file mode 100644
index 00000000..9f649bd1
Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.he.png differ
diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.nl.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.nl.png
new file mode 100644
index 00000000..9f649bd1
Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.nl.png differ
diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.fi.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.fi.png
new file mode 100644
index 00000000..03e1fa8c
Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.fi.png differ
diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.he.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.he.png
new file mode 100644
index 00000000..03e1fa8c
Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.he.png differ
diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.nl.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.nl.png
new file mode 100644
index 00000000..03e1fa8c
Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.nl.png differ
diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.fi.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.fi.png
new file mode 100644
index 00000000..983f836f
Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.fi.png differ
diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.he.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.he.png
new file mode 100644
index 00000000..983f836f
Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.he.png differ
diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.nl.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.nl.png
new file mode 100644
index 00000000..983f836f
Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.nl.png differ
diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.fi.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.fi.png
new file mode 100644
index 00000000..2aede939
Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.fi.png differ
diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.he.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.he.png
new file mode 100644
index 00000000..2aede939
Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.he.png differ
diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.nl.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.nl.png
new file mode 100644
index 00000000..2aede939
Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.nl.png differ
diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.fi.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.fi.png
new file mode 100644
index 00000000..7bc7bab2
Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.fi.png differ
diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.he.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.he.png
new file mode 100644
index 00000000..7bc7bab2
Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.he.png differ
diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.nl.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.nl.png
new file mode 100644
index 00000000..7bc7bab2
Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.nl.png differ
diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.fi.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.fi.png
new file mode 100644
index 00000000..4ffd862a
Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.fi.png differ
diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.he.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.he.png
new file mode 100644
index 00000000..4ffd862a
Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.he.png differ
diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.nl.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.nl.png
new file mode 100644
index 00000000..4ffd862a
Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.nl.png differ
diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.fi.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.fi.png
new file mode 100644
index 00000000..ef506579
Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.fi.png differ
diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.he.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.he.png
new file mode 100644
index 00000000..ef506579
Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.he.png differ
diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.nl.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.nl.png
new file mode 100644
index 00000000..ef506579
Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.nl.png differ
diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.fi.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.fi.png
new file mode 100644
index 00000000..ddf79213
Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.fi.png differ
diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.he.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.he.png
new file mode 100644
index 00000000..ddf79213
Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.he.png differ
diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.nl.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.nl.png
new file mode 100644
index 00000000..ddf79213
Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.nl.png differ
diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.fi.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.fi.png
new file mode 100644
index 00000000..1796bcce
Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.fi.png differ
diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.he.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.he.png
new file mode 100644
index 00000000..1796bcce
Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.he.png differ
diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.nl.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.nl.png
new file mode 100644
index 00000000..1796bcce
Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.nl.png differ
diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.fi.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.fi.png
new file mode 100644
index 00000000..ab763666
Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.fi.png differ
diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.he.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.he.png
new file mode 100644
index 00000000..ab763666
Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.he.png differ
diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.nl.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.nl.png
new file mode 100644
index 00000000..ab763666
Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.nl.png differ
diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.fi.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.fi.png
new file mode 100644
index 00000000..013f247d
Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.fi.png differ
diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.he.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.he.png
new file mode 100644
index 00000000..013f247d
Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.he.png differ
diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.nl.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.nl.png
new file mode 100644
index 00000000..013f247d
Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.nl.png differ
diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.fi.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.fi.png
new file mode 100644
index 00000000..fd1b7753
Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.fi.png differ
diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.he.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.he.png
new file mode 100644
index 00000000..fd1b7753
Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.he.png differ
diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.nl.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.nl.png
new file mode 100644
index 00000000..fd1b7753
Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.nl.png differ
diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.fi.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.fi.png
new file mode 100644
index 00000000..55154b84
Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.fi.png differ
diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.he.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.he.png
new file mode 100644
index 00000000..55154b84
Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.he.png differ
diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.nl.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.nl.png
new file mode 100644
index 00000000..55154b84
Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.nl.png differ
diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.fi.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.fi.png
new file mode 100644
index 00000000..306d6f14
Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.fi.png differ
diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.he.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.he.png
new file mode 100644
index 00000000..306d6f14
Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.he.png differ
diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.nl.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.nl.png
new file mode 100644
index 00000000..306d6f14
Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.nl.png differ
diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.fi.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.fi.png
new file mode 100644
index 00000000..dfb03646
Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.fi.png differ
diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.he.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.he.png
new file mode 100644
index 00000000..dfb03646
Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.he.png differ
diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.nl.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.nl.png
new file mode 100644
index 00000000..dfb03646
Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.nl.png differ
diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.fi.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.fi.png
new file mode 100644
index 00000000..05208120
Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.fi.png differ
diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.he.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.he.png
new file mode 100644
index 00000000..05208120
Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.he.png differ
diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.nl.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.nl.png
new file mode 100644
index 00000000..05208120
Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.nl.png differ
diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.fi.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.fi.jpg
new file mode 100644
index 00000000..e78b8c6c
Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.fi.jpg differ
diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.he.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.he.jpg
new file mode 100644
index 00000000..e78b8c6c
Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.he.jpg differ
diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.nl.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.nl.jpg
new file mode 100644
index 00000000..e78b8c6c
Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.nl.jpg differ
diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.fi.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.fi.png
new file mode 100644
index 00000000..0b221a3f
Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.fi.png differ
diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.he.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.he.png
new file mode 100644
index 00000000..0b221a3f
Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.he.png differ
diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.nl.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.nl.png
new file mode 100644
index 00000000..0b221a3f
Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.nl.png differ
diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.fi.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.fi.png
new file mode 100644
index 00000000..576d3f84
Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.fi.png differ
diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.he.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.he.png
new file mode 100644
index 00000000..576d3f84
Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.he.png differ
diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.nl.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.nl.png
new file mode 100644
index 00000000..576d3f84
Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.nl.png differ
diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.fi.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.fi.png
new file mode 100644
index 00000000..297ccc5e
Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.fi.png differ
diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.he.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.he.png
new file mode 100644
index 00000000..297ccc5e
Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.he.png differ
diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.nl.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.nl.png
new file mode 100644
index 00000000..297ccc5e
Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.nl.png differ
diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.fi.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.fi.png
new file mode 100644
index 00000000..89bd1ba6
Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.fi.png differ
diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.he.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.he.png
new file mode 100644
index 00000000..89bd1ba6
Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.he.png differ
diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.nl.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.nl.png
new file mode 100644
index 00000000..89bd1ba6
Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.nl.png differ
diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.fi.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.fi.jpg
new file mode 100644
index 00000000..383794f2
Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.fi.jpg differ
diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.he.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.he.jpg
new file mode 100644
index 00000000..383794f2
Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.he.jpg differ
diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.nl.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.nl.jpg
new file mode 100644
index 00000000..383794f2
Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.nl.jpg differ
diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.fi.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.fi.png
new file mode 100644
index 00000000..f28538e1
Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.fi.png differ
diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.he.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.he.png
new file mode 100644
index 00000000..f28538e1
Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.he.png differ
diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.nl.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.nl.png
new file mode 100644
index 00000000..f28538e1
Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.nl.png differ
diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.fi.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.fi.png
new file mode 100644
index 00000000..39431760
Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.fi.png differ
diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.he.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.he.png
new file mode 100644
index 00000000..39431760
Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.he.png differ
diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.nl.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.nl.png
new file mode 100644
index 00000000..39431760
Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.nl.png differ
diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.fi.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.fi.png
new file mode 100644
index 00000000..46a26d45
Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.fi.png differ
diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.he.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.he.png
new file mode 100644
index 00000000..46a26d45
Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.he.png differ
diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.nl.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.nl.png
new file mode 100644
index 00000000..46a26d45
Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.nl.png differ
diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.fi.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.fi.png
new file mode 100644
index 00000000..6f70239b
Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.fi.png differ
diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.he.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.he.png
new file mode 100644
index 00000000..6f70239b
Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.he.png differ
diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.nl.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.nl.png
new file mode 100644
index 00000000..6f70239b
Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.nl.png differ
diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.fi.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.fi.png
new file mode 100644
index 00000000..c5cd51da
Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.fi.png differ
diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.he.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.he.png
new file mode 100644
index 00000000..c5cd51da
Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.he.png differ
diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.nl.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.nl.png
new file mode 100644
index 00000000..c5cd51da
Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.nl.png differ
diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.fi.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.fi.png
new file mode 100644
index 00000000..0328b3ea
Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.fi.png differ
diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.he.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.he.png
new file mode 100644
index 00000000..0328b3ea
Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.he.png differ
diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.nl.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.nl.png
new file mode 100644
index 00000000..0328b3ea
Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.nl.png differ
diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.fi.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.fi.png
new file mode 100644
index 00000000..b3d0d223
Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.fi.png differ
diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.he.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.he.png
new file mode 100644
index 00000000..b3d0d223
Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.he.png differ
diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.nl.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.nl.png
new file mode 100644
index 00000000..b3d0d223
Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.nl.png differ
diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.fi.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.fi.png
new file mode 100644
index 00000000..0729dbce
Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.fi.png differ
diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.he.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.he.png
new file mode 100644
index 00000000..0729dbce
Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.he.png differ
diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.nl.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.nl.png
new file mode 100644
index 00000000..0729dbce
Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.nl.png differ
diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.fi.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.fi.png
new file mode 100644
index 00000000..2e3adef5
Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.fi.png differ
diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.he.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.he.png
new file mode 100644
index 00000000..2e3adef5
Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.he.png differ
diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.nl.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.nl.png
new file mode 100644
index 00000000..2e3adef5
Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.nl.png differ
diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.fi.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.fi.png
new file mode 100644
index 00000000..4e9aa9b4
Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.fi.png differ
diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.he.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.he.png
new file mode 100644
index 00000000..4e9aa9b4
Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.he.png differ
diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.nl.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.nl.png
new file mode 100644
index 00000000..4e9aa9b4
Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.nl.png differ
diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.fi.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.fi.png
new file mode 100644
index 00000000..766527c0
Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.fi.png differ
diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.he.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.he.png
new file mode 100644
index 00000000..766527c0
Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.he.png differ
diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.nl.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.nl.png
new file mode 100644
index 00000000..766527c0
Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.nl.png differ
diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.fi.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.fi.png
new file mode 100644
index 00000000..f34ad7c6
Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.fi.png differ
diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.he.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.he.png
new file mode 100644
index 00000000..f34ad7c6
Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.he.png differ
diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.nl.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.nl.png
new file mode 100644
index 00000000..f34ad7c6
Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.nl.png differ
diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.fi.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.fi.png
new file mode 100644
index 00000000..403bb436
Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.fi.png differ
diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.he.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.he.png
new file mode 100644
index 00000000..403bb436
Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.he.png differ
diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.nl.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.nl.png
new file mode 100644
index 00000000..403bb436
Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.nl.png differ
diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.fi.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.fi.png
new file mode 100644
index 00000000..07398a97
Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.fi.png differ
diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.he.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.he.png
new file mode 100644
index 00000000..07398a97
Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.he.png differ
diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.nl.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.nl.png
new file mode 100644
index 00000000..07398a97
Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.nl.png differ
diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.fi.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.fi.png
new file mode 100644
index 00000000..83d0a29e
Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.fi.png differ
diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.he.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.he.png
new file mode 100644
index 00000000..83d0a29e
Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.he.png differ
diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.nl.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.nl.png
new file mode 100644
index 00000000..83d0a29e
Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.nl.png differ
diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.fi.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.fi.png
new file mode 100644
index 00000000..cdd566f5
Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.fi.png differ
diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.he.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.he.png
new file mode 100644
index 00000000..cdd566f5
Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.he.png differ
diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.nl.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.nl.png
new file mode 100644
index 00000000..cdd566f5
Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.nl.png differ
diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.fi.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.fi.png
new file mode 100644
index 00000000..50caa7a8
Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.fi.png differ
diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.he.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.he.png
new file mode 100644
index 00000000..50caa7a8
Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.he.png differ
diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.nl.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.nl.png
new file mode 100644
index 00000000..50caa7a8
Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.nl.png differ
diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.fi.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.fi.png
new file mode 100644
index 00000000..e68c1881
Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.fi.png differ
diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.he.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.he.png
new file mode 100644
index 00000000..e68c1881
Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.he.png differ
diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.nl.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.nl.png
new file mode 100644
index 00000000..e68c1881
Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.nl.png differ
diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.fi.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.fi.png
new file mode 100644
index 00000000..357708db
Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.fi.png differ
diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.he.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.he.png
new file mode 100644
index 00000000..357708db
Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.he.png differ
diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.nl.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.nl.png
new file mode 100644
index 00000000..357708db
Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.nl.png differ
diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.fi.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.fi.png
new file mode 100644
index 00000000..ff2cb168
Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.fi.png differ
diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.he.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.he.png
new file mode 100644
index 00000000..ff2cb168
Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.he.png differ
diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.nl.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.nl.png
new file mode 100644
index 00000000..ff2cb168
Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.nl.png differ
diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.fi.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.fi.png
new file mode 100644
index 00000000..4dd28830
Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.fi.png differ
diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.he.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.he.png
new file mode 100644
index 00000000..4dd28830
Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.he.png differ
diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.nl.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.nl.png
new file mode 100644
index 00000000..4dd28830
Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.nl.png differ
diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.fi.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.fi.png
new file mode 100644
index 00000000..36a0bed7
Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.fi.png differ
diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.he.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.he.png
new file mode 100644
index 00000000..36a0bed7
Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.he.png differ
diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.nl.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.nl.png
new file mode 100644
index 00000000..36a0bed7
Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.nl.png differ
diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.fi.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.fi.png
new file mode 100644
index 00000000..43b82415
Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.fi.png differ
diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.he.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.he.png
new file mode 100644
index 00000000..43b82415
Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.he.png differ
diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.nl.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.nl.png
new file mode 100644
index 00000000..43b82415
Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.nl.png differ
diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.fi.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.fi.png
new file mode 100644
index 00000000..9f42e92d
Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.fi.png differ
diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.he.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.he.png
new file mode 100644
index 00000000..9f42e92d
Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.he.png differ
diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.nl.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.nl.png
new file mode 100644
index 00000000..9f42e92d
Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.nl.png differ
diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.fi.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.fi.png
new file mode 100644
index 00000000..91118b35
Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.fi.png differ
diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.he.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.he.png
new file mode 100644
index 00000000..91118b35
Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.he.png differ
diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.nl.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.nl.png
new file mode 100644
index 00000000..91118b35
Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.nl.png differ
diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.fi.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.fi.png
new file mode 100644
index 00000000..c1074a8e
Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.fi.png differ
diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.he.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.he.png
new file mode 100644
index 00000000..c1074a8e
Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.he.png differ
diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.nl.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.nl.png
new file mode 100644
index 00000000..c1074a8e
Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.nl.png differ
diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.fi.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.fi.png
new file mode 100644
index 00000000..a4cca4dc
Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.fi.png differ
diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.he.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.he.png
new file mode 100644
index 00000000..a4cca4dc
Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.he.png differ
diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.nl.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.nl.png
new file mode 100644
index 00000000..a4cca4dc
Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.nl.png differ
diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.fi.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.fi.png
new file mode 100644
index 00000000..1dd02459
Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.fi.png differ
diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.he.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.he.png
new file mode 100644
index 00000000..1dd02459
Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.he.png differ
diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.nl.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.nl.png
new file mode 100644
index 00000000..1dd02459
Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.nl.png differ
diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.fi.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.fi.png
new file mode 100644
index 00000000..64ba974b
Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.fi.png differ
diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.he.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.he.png
new file mode 100644
index 00000000..64ba974b
Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.he.png differ
diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.nl.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.nl.png
new file mode 100644
index 00000000..64ba974b
Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.nl.png differ
diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.fi.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.fi.png
new file mode 100644
index 00000000..fd3d1f9b
Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.fi.png differ
diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.he.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.he.png
new file mode 100644
index 00000000..fd3d1f9b
Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.he.png differ
diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.nl.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.nl.png
new file mode 100644
index 00000000..fd3d1f9b
Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.nl.png differ
diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.fi.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.fi.png
new file mode 100644
index 00000000..f523159b
Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.fi.png differ
diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.he.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.he.png
new file mode 100644
index 00000000..f523159b
Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.he.png differ
diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.nl.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.nl.png
new file mode 100644
index 00000000..f523159b
Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.nl.png differ
diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.fi.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.fi.png
new file mode 100644
index 00000000..70a9bacf
Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.fi.png differ
diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.he.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.he.png
new file mode 100644
index 00000000..70a9bacf
Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.he.png differ
diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.nl.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.nl.png
new file mode 100644
index 00000000..70a9bacf
Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.nl.png differ
diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.fi.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.fi.png
new file mode 100644
index 00000000..9e30ab1c
Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.fi.png differ
diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.he.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.he.png
new file mode 100644
index 00000000..9e30ab1c
Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.he.png differ
diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.nl.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.nl.png
new file mode 100644
index 00000000..9e30ab1c
Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.nl.png differ
diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.fi.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.fi.png
new file mode 100644
index 00000000..e9f61adc
Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.fi.png differ
diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.he.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.he.png
new file mode 100644
index 00000000..e9f61adc
Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.he.png differ
diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.nl.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.nl.png
new file mode 100644
index 00000000..e9f61adc
Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.nl.png differ
diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.fi.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.fi.png
new file mode 100644
index 00000000..a54521f7
Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.fi.png differ
diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.he.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.he.png
new file mode 100644
index 00000000..a54521f7
Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.he.png differ
diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.nl.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.nl.png
new file mode 100644
index 00000000..a54521f7
Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.nl.png differ
diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.fi.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.fi.png
new file mode 100644
index 00000000..6981df8a
Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.fi.png differ
diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.he.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.he.png
new file mode 100644
index 00000000..6981df8a
Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.he.png differ
diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.nl.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.nl.png
new file mode 100644
index 00000000..6981df8a
Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.nl.png differ
diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.fi.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.fi.png
new file mode 100644
index 00000000..2722c065
Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.fi.png differ
diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.he.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.he.png
new file mode 100644
index 00000000..2722c065
Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.he.png differ
diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.nl.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.nl.png
new file mode 100644
index 00000000..2722c065
Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.nl.png differ
diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.fi.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.fi.jpg
new file mode 100644
index 00000000..cce2a759
Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.fi.jpg differ
diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.he.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.he.jpg
new file mode 100644
index 00000000..cce2a759
Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.he.jpg differ
diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.nl.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.nl.jpg
new file mode 100644
index 00000000..cce2a759
Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.nl.jpg differ
diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.fi.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.fi.png
new file mode 100644
index 00000000..26e0ae43
Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.fi.png differ
diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.he.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.he.png
new file mode 100644
index 00000000..26e0ae43
Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.he.png differ
diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.nl.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.nl.png
new file mode 100644
index 00000000..26e0ae43
Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.nl.png differ
diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.fi.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.fi.png
new file mode 100644
index 00000000..a5d549fd
Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.fi.png differ
diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.he.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.he.png
new file mode 100644
index 00000000..a5d549fd
Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.he.png differ
diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.nl.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.nl.png
new file mode 100644
index 00000000..a5d549fd
Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.nl.png differ
diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.fi.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.fi.png
new file mode 100644
index 00000000..a251745c
Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.fi.png differ
diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.he.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.he.png
new file mode 100644
index 00000000..a251745c
Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.he.png differ
diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.nl.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.nl.png
new file mode 100644
index 00000000..a251745c
Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.nl.png differ
diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.fi.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.fi.png
new file mode 100644
index 00000000..bb97d28e
Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.fi.png differ
diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.he.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.he.png
new file mode 100644
index 00000000..bb97d28e
Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.he.png differ
diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.nl.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.nl.png
new file mode 100644
index 00000000..bb97d28e
Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.nl.png differ
diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.fi.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.fi.png
new file mode 100644
index 00000000..e34dea22
Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.fi.png differ
diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.he.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.he.png
new file mode 100644
index 00000000..e34dea22
Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.he.png differ
diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.nl.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.nl.png
new file mode 100644
index 00000000..e34dea22
Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.nl.png differ
diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.fi.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.fi.png
new file mode 100644
index 00000000..fa863501
Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.fi.png differ
diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.he.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.he.png
new file mode 100644
index 00000000..fa863501
Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.he.png differ
diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.nl.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.nl.png
new file mode 100644
index 00000000..fa863501
Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.nl.png differ
diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.fi.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.fi.png
new file mode 100644
index 00000000..0d0e0c48
Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.fi.png differ
diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.he.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.he.png
new file mode 100644
index 00000000..0d0e0c48
Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.he.png differ
diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.nl.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.nl.png
new file mode 100644
index 00000000..0d0e0c48
Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.nl.png differ
diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.fi.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.fi.png
new file mode 100644
index 00000000..6f79a498
Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.fi.png differ
diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.he.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.he.png
new file mode 100644
index 00000000..6f79a498
Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.he.png differ
diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.nl.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.nl.png
new file mode 100644
index 00000000..6f79a498
Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.nl.png differ
diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.fi.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.fi.png
new file mode 100644
index 00000000..8527d4cd
Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.fi.png differ
diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.he.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.he.png
new file mode 100644
index 00000000..8527d4cd
Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.he.png differ
diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.nl.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.nl.png
new file mode 100644
index 00000000..8527d4cd
Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.nl.png differ
diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.fi.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.fi.png
new file mode 100644
index 00000000..8597bf4d
Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.fi.png differ
diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.he.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.he.png
new file mode 100644
index 00000000..8597bf4d
Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.he.png differ
diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.nl.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.nl.png
new file mode 100644
index 00000000..8597bf4d
Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.nl.png differ
diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.fi.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.fi.png
new file mode 100644
index 00000000..3bf24358
Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.fi.png differ
diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.he.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.he.png
new file mode 100644
index 00000000..3bf24358
Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.he.png differ
diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.nl.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.nl.png
new file mode 100644
index 00000000..3bf24358
Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.nl.png differ
diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.fi.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.fi.png
new file mode 100644
index 00000000..562f66d2
Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.fi.png differ
diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.he.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.he.png
new file mode 100644
index 00000000..562f66d2
Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.he.png differ
diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.nl.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.nl.png
new file mode 100644
index 00000000..562f66d2
Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.nl.png differ
diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.fi.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.fi.png
new file mode 100644
index 00000000..2f50d53a
Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.fi.png differ
diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.he.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.he.png
new file mode 100644
index 00000000..2f50d53a
Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.he.png differ
diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.nl.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.nl.png
new file mode 100644
index 00000000..2f50d53a
Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.nl.png differ
diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.fi.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.fi.png
new file mode 100644
index 00000000..de7f343e
Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.fi.png differ
diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.he.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.he.png
new file mode 100644
index 00000000..de7f343e
Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.he.png differ
diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.nl.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.nl.png
new file mode 100644
index 00000000..de7f343e
Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.nl.png differ
diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.fi.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.fi.png
new file mode 100644
index 00000000..c8b1a544
Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.fi.png differ
diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.he.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.he.png
new file mode 100644
index 00000000..c8b1a544
Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.he.png differ
diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.nl.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.nl.png
new file mode 100644
index 00000000..c8b1a544
Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.nl.png differ
diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.fi.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.fi.png
new file mode 100644
index 00000000..17d1151d
Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.fi.png differ
diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.he.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.he.png
new file mode 100644
index 00000000..17d1151d
Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.he.png differ
diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.nl.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.nl.png
new file mode 100644
index 00000000..17d1151d
Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.nl.png differ
diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.fi.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.fi.png
new file mode 100644
index 00000000..ffafc104
Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.fi.png differ
diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.he.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.he.png
new file mode 100644
index 00000000..ffafc104
Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.he.png differ
diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.nl.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.nl.png
new file mode 100644
index 00000000..ffafc104
Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.nl.png differ
diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.fi.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.fi.png
new file mode 100644
index 00000000..e3d86f8c
Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.fi.png differ
diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.he.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.he.png
new file mode 100644
index 00000000..e3d86f8c
Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.he.png differ
diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.nl.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.nl.png
new file mode 100644
index 00000000..e3d86f8c
Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.nl.png differ
diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.fi.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.fi.png
new file mode 100644
index 00000000..3a4445ee
Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.fi.png differ
diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.he.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.he.png
new file mode 100644
index 00000000..3a4445ee
Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.he.png differ
diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.nl.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.nl.png
new file mode 100644
index 00000000..3a4445ee
Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.nl.png differ
diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.fi.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.fi.png
new file mode 100644
index 00000000..b2bf4d3f
Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.fi.png differ
diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.he.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.he.png
new file mode 100644
index 00000000..b2bf4d3f
Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.he.png differ
diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.nl.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.nl.png
new file mode 100644
index 00000000..b2bf4d3f
Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.nl.png differ
diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.fi.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.fi.png
new file mode 100644
index 00000000..467cedcd
Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.fi.png differ
diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.he.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.he.png
new file mode 100644
index 00000000..467cedcd
Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.he.png differ
diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.nl.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.nl.png
new file mode 100644
index 00000000..467cedcd
Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.nl.png differ
diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.fi.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.fi.png
new file mode 100644
index 00000000..88efaa59
Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.fi.png differ
diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.he.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.he.png
new file mode 100644
index 00000000..88efaa59
Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.he.png differ
diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.nl.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.nl.png
new file mode 100644
index 00000000..88efaa59
Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.nl.png differ
diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.fi.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.fi.png
new file mode 100644
index 00000000..6197ed95
Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.fi.png differ
diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.he.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.he.png
new file mode 100644
index 00000000..6197ed95
Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.he.png differ
diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.nl.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.nl.png
new file mode 100644
index 00000000..6197ed95
Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.nl.png differ
diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.fi.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.fi.png
new file mode 100644
index 00000000..ec7768da
Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.fi.png differ
diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.he.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.he.png
new file mode 100644
index 00000000..ec7768da
Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.he.png differ
diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.nl.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.nl.png
new file mode 100644
index 00000000..ec7768da
Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.nl.png differ
diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.fi.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.fi.png
new file mode 100644
index 00000000..f68bf461
Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.fi.png differ
diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.he.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.he.png
new file mode 100644
index 00000000..f68bf461
Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.he.png differ
diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.nl.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.nl.png
new file mode 100644
index 00000000..f68bf461
Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.nl.png differ
diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.fi.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.fi.png
new file mode 100644
index 00000000..73e34cfe
Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.fi.png differ
diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.he.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.he.png
new file mode 100644
index 00000000..73e34cfe
Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.he.png differ
diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.nl.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.nl.png
new file mode 100644
index 00000000..73e34cfe
Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.nl.png differ
diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.fi.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.fi.png
new file mode 100644
index 00000000..21cc6bd0
Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.fi.png differ
diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.he.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.he.png
new file mode 100644
index 00000000..21cc6bd0
Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.he.png differ
diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.nl.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.nl.png
new file mode 100644
index 00000000..21cc6bd0
Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.nl.png differ
diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.fi.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.fi.png
new file mode 100644
index 00000000..9c7deb23
Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.fi.png differ
diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.he.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.he.png
new file mode 100644
index 00000000..9c7deb23
Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.he.png differ
diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.nl.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.nl.png
new file mode 100644
index 00000000..9c7deb23
Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.nl.png differ
diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.fi.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.fi.png
new file mode 100644
index 00000000..ddc9958b
Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.fi.png differ
diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.he.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.he.png
new file mode 100644
index 00000000..ddc9958b
Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.he.png differ
diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.nl.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.nl.png
new file mode 100644
index 00000000..ddc9958b
Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.nl.png differ
diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.fi.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.fi.png
new file mode 100644
index 00000000..d181210a
Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.fi.png differ
diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.he.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.he.png
new file mode 100644
index 00000000..d181210a
Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.he.png differ
diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.nl.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.nl.png
new file mode 100644
index 00000000..d181210a
Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.nl.png differ
diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.fi.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.fi.png
new file mode 100644
index 00000000..a00ab427
Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.fi.png differ
diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.he.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.he.png
new file mode 100644
index 00000000..a00ab427
Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.he.png differ
diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.nl.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.nl.png
new file mode 100644
index 00000000..a00ab427
Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.nl.png differ
diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.fi.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.fi.png
new file mode 100644
index 00000000..dedb38a3
Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.fi.png differ
diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.he.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.he.png
new file mode 100644
index 00000000..dedb38a3
Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.he.png differ
diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.nl.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.nl.png
new file mode 100644
index 00000000..dedb38a3
Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.nl.png differ
diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.fi.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.fi.png
new file mode 100644
index 00000000..2b34487d
Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.fi.png differ
diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.he.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.he.png
new file mode 100644
index 00000000..2b34487d
Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.he.png differ
diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.nl.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.nl.png
new file mode 100644
index 00000000..2b34487d
Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.nl.png differ
diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.fi.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.fi.png
new file mode 100644
index 00000000..1cae68ed
Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.fi.png differ
diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.he.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.he.png
new file mode 100644
index 00000000..1cae68ed
Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.he.png differ
diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.nl.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.nl.png
new file mode 100644
index 00000000..1cae68ed
Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.nl.png differ
diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.fi.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.fi.png
new file mode 100644
index 00000000..df961cae
Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.fi.png differ
diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.he.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.he.png
new file mode 100644
index 00000000..df961cae
Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.he.png differ
diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.nl.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.nl.png
new file mode 100644
index 00000000..df961cae
Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.nl.png differ
diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.fi.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.fi.png
new file mode 100644
index 00000000..aaeaeff8
Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.fi.png differ
diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.he.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.he.png
new file mode 100644
index 00000000..aaeaeff8
Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.he.png differ
diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.nl.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.nl.png
new file mode 100644
index 00000000..aaeaeff8
Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.nl.png differ
diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.fi.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.fi.png
new file mode 100644
index 00000000..7613fe86
Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.fi.png differ
diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.he.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.he.png
new file mode 100644
index 00000000..7613fe86
Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.he.png differ
diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.nl.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.nl.png
new file mode 100644
index 00000000..7613fe86
Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.nl.png differ
diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.fi.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.fi.png
new file mode 100644
index 00000000..335bdf32
Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.fi.png differ
diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.he.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.he.png
new file mode 100644
index 00000000..335bdf32
Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.he.png differ
diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.nl.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.nl.png
new file mode 100644
index 00000000..335bdf32
Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.nl.png differ
diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.fi.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.fi.png
new file mode 100644
index 00000000..32c8ba10
Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.fi.png differ
diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.he.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.he.png
new file mode 100644
index 00000000..32c8ba10
Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.he.png differ
diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.nl.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.nl.png
new file mode 100644
index 00000000..32c8ba10
Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.nl.png differ
diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.fi.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.fi.png
new file mode 100644
index 00000000..82802e17
Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.fi.png differ
diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.he.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.he.png
new file mode 100644
index 00000000..82802e17
Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.he.png differ
diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.nl.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.nl.png
new file mode 100644
index 00000000..82802e17
Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.nl.png differ
diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.fi.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.fi.png
new file mode 100644
index 00000000..8214fc2c
Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.fi.png differ
diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.he.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.he.png
new file mode 100644
index 00000000..8214fc2c
Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.he.png differ
diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.nl.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.nl.png
new file mode 100644
index 00000000..8214fc2c
Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.nl.png differ
diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.fi.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.fi.png
new file mode 100644
index 00000000..434baaad
Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.fi.png differ
diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.he.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.he.png
new file mode 100644
index 00000000..434baaad
Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.he.png differ
diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.nl.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.nl.png
new file mode 100644
index 00000000..434baaad
Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.nl.png differ
diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.fi.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.fi.png
new file mode 100644
index 00000000..d32271b5
Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.fi.png differ
diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.he.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.he.png
new file mode 100644
index 00000000..d32271b5
Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.he.png differ
diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.nl.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.nl.png
new file mode 100644
index 00000000..d32271b5
Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.nl.png differ
diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.fi.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.fi.png
new file mode 100644
index 00000000..04cd7dc8
Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.fi.png differ
diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.he.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.he.png
new file mode 100644
index 00000000..04cd7dc8
Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.he.png differ
diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.nl.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.nl.png
new file mode 100644
index 00000000..04cd7dc8
Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.nl.png differ
diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.fi.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.fi.png
new file mode 100644
index 00000000..a8a12bce
Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.fi.png differ
diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.he.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.he.png
new file mode 100644
index 00000000..a8a12bce
Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.he.png differ
diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.nl.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.nl.png
new file mode 100644
index 00000000..a8a12bce
Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.nl.png differ
diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.fi.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.fi.jpg
new file mode 100644
index 00000000..23ea98b2
Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.fi.jpg differ
diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.he.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.he.jpg
new file mode 100644
index 00000000..23ea98b2
Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.he.jpg differ
diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.nl.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.nl.jpg
new file mode 100644
index 00000000..23ea98b2
Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.nl.jpg differ
diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.fi.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.fi.jpg
new file mode 100644
index 00000000..1e3581d3
Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.fi.jpg differ
diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.he.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.he.jpg
new file mode 100644
index 00000000..1e3581d3
Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.he.jpg differ
diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.nl.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.nl.jpg
new file mode 100644
index 00000000..1e3581d3
Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.nl.jpg differ
diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.fi.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.fi.jpg
new file mode 100644
index 00000000..554ea37b
Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.fi.jpg differ
diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.he.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.he.jpg
new file mode 100644
index 00000000..554ea37b
Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.he.jpg differ
diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.nl.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.nl.jpg
new file mode 100644
index 00000000..554ea37b
Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.nl.jpg differ
diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.fi.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.fi.jpg
new file mode 100644
index 00000000..427ba4c3
Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.fi.jpg differ
diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.he.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.he.jpg
new file mode 100644
index 00000000..427ba4c3
Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.he.jpg differ
diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.nl.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.nl.jpg
new file mode 100644
index 00000000..427ba4c3
Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.nl.jpg differ
diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.fi.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.fi.jpg
new file mode 100644
index 00000000..b2357285
Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.fi.jpg differ
diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.he.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.he.jpg
new file mode 100644
index 00000000..b2357285
Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.he.jpg differ
diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.nl.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.nl.jpg
new file mode 100644
index 00000000..b2357285
Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.nl.jpg differ
diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.fi.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.fi.jpg
new file mode 100644
index 00000000..1736ebb4
Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.fi.jpg differ
diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.he.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.he.jpg
new file mode 100644
index 00000000..1736ebb4
Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.he.jpg differ
diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.nl.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.nl.jpg
new file mode 100644
index 00000000..1736ebb4
Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.nl.jpg differ
diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.fi.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.fi.jpg
new file mode 100644
index 00000000..bf1d724f
Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.fi.jpg differ
diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.he.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.he.jpg
new file mode 100644
index 00000000..bf1d724f
Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.he.jpg differ
diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.nl.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.nl.jpg
new file mode 100644
index 00000000..bf1d724f
Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.nl.jpg differ
diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.fi.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.fi.jpg
new file mode 100644
index 00000000..bb78259a
Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.fi.jpg differ
diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.he.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.he.jpg
new file mode 100644
index 00000000..bb78259a
Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.he.jpg differ
diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.nl.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.nl.jpg
new file mode 100644
index 00000000..bb78259a
Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.nl.jpg differ
diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.fi.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.fi.jpg
new file mode 100644
index 00000000..b311b568
Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.fi.jpg differ
diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.he.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.he.jpg
new file mode 100644
index 00000000..b311b568
Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.he.jpg differ
diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.nl.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.nl.jpg
new file mode 100644
index 00000000..b311b568
Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.nl.jpg differ
diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.fi.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.fi.jpg
new file mode 100644
index 00000000..5bd350fd
Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.fi.jpg differ
diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.he.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.he.jpg
new file mode 100644
index 00000000..5bd350fd
Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.he.jpg differ
diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.nl.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.nl.jpg
new file mode 100644
index 00000000..5bd350fd
Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.nl.jpg differ
diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.fi.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.fi.jpg
new file mode 100644
index 00000000..66fbe114
Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.fi.jpg differ
diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.he.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.he.jpg
new file mode 100644
index 00000000..66fbe114
Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.he.jpg differ
diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.nl.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.nl.jpg
new file mode 100644
index 00000000..66fbe114
Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.nl.jpg differ
diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.fi.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.fi.jpg
new file mode 100644
index 00000000..050e7206
Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.fi.jpg differ
diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.he.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.he.jpg
new file mode 100644
index 00000000..050e7206
Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.he.jpg differ
diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.nl.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.nl.jpg
new file mode 100644
index 00000000..050e7206
Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.nl.jpg differ
diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.fi.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.fi.jpg
new file mode 100644
index 00000000..91c64faa
Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.fi.jpg differ
diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.he.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.he.jpg
new file mode 100644
index 00000000..91c64faa
Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.he.jpg differ
diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.nl.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.nl.jpg
new file mode 100644
index 00000000..91c64faa
Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.nl.jpg differ
diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.fi.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.fi.jpg
new file mode 100644
index 00000000..36e1a4b3
Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.fi.jpg differ
diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.he.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.he.jpg
new file mode 100644
index 00000000..36e1a4b3
Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.he.jpg differ
diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.nl.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.nl.jpg
new file mode 100644
index 00000000..36e1a4b3
Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.nl.jpg differ
diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.fi.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.fi.jpg
new file mode 100644
index 00000000..1b87df4c
Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.fi.jpg differ
diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.he.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.he.jpg
new file mode 100644
index 00000000..1b87df4c
Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.he.jpg differ
diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.nl.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.nl.jpg
new file mode 100644
index 00000000..1b87df4c
Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.nl.jpg differ
diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.fi.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.fi.jpg
new file mode 100644
index 00000000..8df37a22
Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.fi.jpg differ
diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.he.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.he.jpg
new file mode 100644
index 00000000..8df37a22
Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.he.jpg differ
diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.nl.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.nl.jpg
new file mode 100644
index 00000000..8df37a22
Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.nl.jpg differ
diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.fi.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.fi.jpg
new file mode 100644
index 00000000..943af1b9
Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.fi.jpg differ
diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.he.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.he.jpg
new file mode 100644
index 00000000..943af1b9
Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.he.jpg differ
diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.nl.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.nl.jpg
new file mode 100644
index 00000000..943af1b9
Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.nl.jpg differ
diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.fi.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.fi.jpg
new file mode 100644
index 00000000..5a96f7fb
Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.fi.jpg differ
diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.he.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.he.jpg
new file mode 100644
index 00000000..5a96f7fb
Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.he.jpg differ
diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.nl.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.nl.jpg
new file mode 100644
index 00000000..5a96f7fb
Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.nl.jpg differ
diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.fi.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.fi.jpg
new file mode 100644
index 00000000..8f0bee50
Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.fi.jpg differ
diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.he.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.he.jpg
new file mode 100644
index 00000000..8f0bee50
Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.he.jpg differ
diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.nl.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.nl.jpg
new file mode 100644
index 00000000..8f0bee50
Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.nl.jpg differ
diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.fi.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.fi.jpg
new file mode 100644
index 00000000..4ba24109
Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.fi.jpg differ
diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.he.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.he.jpg
new file mode 100644
index 00000000..4ba24109
Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.he.jpg differ
diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.nl.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.nl.jpg
new file mode 100644
index 00000000..4ba24109
Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.nl.jpg differ
diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.fi.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.fi.jpg
new file mode 100644
index 00000000..cdf0f557
Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.fi.jpg differ
diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.he.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.he.jpg
new file mode 100644
index 00000000..cdf0f557
Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.he.jpg differ
diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.nl.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.nl.jpg
new file mode 100644
index 00000000..cdf0f557
Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.nl.jpg differ
diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.fi.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.fi.jpg
new file mode 100644
index 00000000..f59ee98d
Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.fi.jpg differ
diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.he.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.he.jpg
new file mode 100644
index 00000000..f59ee98d
Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.he.jpg differ
diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.nl.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.nl.jpg
new file mode 100644
index 00000000..f59ee98d
Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.nl.jpg differ
diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.fi.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.fi.jpg
new file mode 100644
index 00000000..5bdbfd14
Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.fi.jpg differ
diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.he.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.he.jpg
new file mode 100644
index 00000000..5bdbfd14
Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.he.jpg differ
diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.nl.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.nl.jpg
new file mode 100644
index 00000000..5bdbfd14
Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.nl.jpg differ
diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.fi.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.fi.jpg
new file mode 100644
index 00000000..b78ab3ac
Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.fi.jpg differ
diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.he.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.he.jpg
new file mode 100644
index 00000000..b78ab3ac
Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.he.jpg differ
diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.nl.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.nl.jpg
new file mode 100644
index 00000000..b78ab3ac
Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.nl.jpg differ
diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.fi.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.fi.png
new file mode 100644
index 00000000..d071dffe
Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.fi.png differ
diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.he.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.he.png
new file mode 100644
index 00000000..d071dffe
Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.he.png differ
diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.nl.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.nl.png
new file mode 100644
index 00000000..d071dffe
Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.nl.png differ
diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.fi.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.fi.png
new file mode 100644
index 00000000..b8947f6d
Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.fi.png differ
diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.he.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.he.png
new file mode 100644
index 00000000..b8947f6d
Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.he.png differ
diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.nl.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.nl.png
new file mode 100644
index 00000000..b8947f6d
Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.nl.png differ
diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.fi.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.fi.png
new file mode 100644
index 00000000..5c5dfb96
Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.fi.png differ
diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.he.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.he.png
new file mode 100644
index 00000000..5c5dfb96
Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.he.png differ
diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.nl.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.nl.png
new file mode 100644
index 00000000..5c5dfb96
Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.nl.png differ
diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.fi.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.fi.png
new file mode 100644
index 00000000..663ad7e9
Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.fi.png differ
diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.he.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.he.png
new file mode 100644
index 00000000..663ad7e9
Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.he.png differ
diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.nl.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.nl.png
new file mode 100644
index 00000000..663ad7e9
Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.nl.png differ
diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.fi.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.fi.png
new file mode 100644
index 00000000..b1e33d6b
Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.fi.png differ
diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.he.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.he.png
new file mode 100644
index 00000000..b1e33d6b
Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.he.png differ
diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.nl.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.nl.png
new file mode 100644
index 00000000..b1e33d6b
Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.nl.png differ
diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.fi.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.fi.png
new file mode 100644
index 00000000..2a03ab78
Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.fi.png differ
diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.he.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.he.png
new file mode 100644
index 00000000..2a03ab78
Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.he.png differ
diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.nl.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.nl.png
new file mode 100644
index 00000000..2a03ab78
Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.nl.png differ
diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.fi.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.fi.png
new file mode 100644
index 00000000..02ef1351
Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.fi.png differ
diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.he.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.he.png
new file mode 100644
index 00000000..02ef1351
Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.he.png differ
diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.nl.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.nl.png
new file mode 100644
index 00000000..02ef1351
Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.nl.png differ
diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.fi.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.fi.png
new file mode 100644
index 00000000..33faabd1
Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.fi.png differ
diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.he.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.he.png
new file mode 100644
index 00000000..33faabd1
Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.he.png differ
diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.nl.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.nl.png
new file mode 100644
index 00000000..33faabd1
Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.nl.png differ
diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.fi.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.fi.png
new file mode 100644
index 00000000..aa94da2c
Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.fi.png differ
diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.he.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.he.png
new file mode 100644
index 00000000..aa94da2c
Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.he.png differ
diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.nl.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.nl.png
new file mode 100644
index 00000000..aa94da2c
Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.nl.png differ
diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.fi.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.fi.png
new file mode 100644
index 00000000..ac000818
Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.fi.png differ
diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.he.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.he.png
new file mode 100644
index 00000000..ac000818
Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.he.png differ
diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.nl.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.nl.png
new file mode 100644
index 00000000..ac000818
Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.nl.png differ
diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.fi.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.fi.png
new file mode 100644
index 00000000..2fb519f5
Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.fi.png differ
diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.he.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.he.png
new file mode 100644
index 00000000..2fb519f5
Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.he.png differ
diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.nl.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.nl.png
new file mode 100644
index 00000000..2fb519f5
Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.nl.png differ
diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.fi.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.fi.png
new file mode 100644
index 00000000..48459b92
Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.fi.png differ
diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.he.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.he.png
new file mode 100644
index 00000000..48459b92
Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.he.png differ
diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.nl.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.nl.png
new file mode 100644
index 00000000..48459b92
Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.nl.png differ
diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.fi.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.fi.png
new file mode 100644
index 00000000..d502a579
Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.fi.png differ
diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.he.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.he.png
new file mode 100644
index 00000000..d502a579
Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.he.png differ
diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.nl.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.nl.png
new file mode 100644
index 00000000..d502a579
Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.nl.png differ
diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.fi.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.fi.png
new file mode 100644
index 00000000..fca45002
Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.fi.png differ
diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.he.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.he.png
new file mode 100644
index 00000000..fca45002
Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.he.png differ
diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.nl.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.nl.png
new file mode 100644
index 00000000..fca45002
Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.nl.png differ
diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.fi.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.fi.png
new file mode 100644
index 00000000..94aa28db
Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.fi.png differ
diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.he.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.he.png
new file mode 100644
index 00000000..94aa28db
Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.he.png differ
diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.nl.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.nl.png
new file mode 100644
index 00000000..94aa28db
Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.nl.png differ
diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.fi.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.fi.png
new file mode 100644
index 00000000..894df473
Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.fi.png differ
diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.he.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.he.png
new file mode 100644
index 00000000..894df473
Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.he.png differ
diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.nl.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.nl.png
new file mode 100644
index 00000000..894df473
Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.nl.png differ
diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.fi.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.fi.png
new file mode 100644
index 00000000..b75dfdd2
Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.fi.png differ
diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.he.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.he.png
new file mode 100644
index 00000000..b75dfdd2
Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.he.png differ
diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.nl.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.nl.png
new file mode 100644
index 00000000..b75dfdd2
Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.nl.png differ
diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.fi.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.fi.png
new file mode 100644
index 00000000..1e7934c3
Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.fi.png differ
diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.he.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.he.png
new file mode 100644
index 00000000..1e7934c3
Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.he.png differ
diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.nl.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.nl.png
new file mode 100644
index 00000000..1e7934c3
Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.nl.png differ
diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.fi.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.fi.png
new file mode 100644
index 00000000..5bb319ec
Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.fi.png differ
diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.he.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.he.png
new file mode 100644
index 00000000..5bb319ec
Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.he.png differ
diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.nl.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.nl.png
new file mode 100644
index 00000000..5bb319ec
Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.nl.png differ
diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.fi.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.fi.png
new file mode 100644
index 00000000..d66e224f
Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.fi.png differ
diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.he.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.he.png
new file mode 100644
index 00000000..d66e224f
Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.he.png differ
diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.nl.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.nl.png
new file mode 100644
index 00000000..d66e224f
Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.nl.png differ
diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.fi.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.fi.png
new file mode 100644
index 00000000..ed18e7b0
Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.fi.png differ
diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.he.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.he.png
new file mode 100644
index 00000000..ed18e7b0
Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.he.png differ
diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.nl.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.nl.png
new file mode 100644
index 00000000..ed18e7b0
Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.nl.png differ
diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.fi.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.fi.png
new file mode 100644
index 00000000..9acb21a7
Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.fi.png differ
diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.he.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.he.png
new file mode 100644
index 00000000..9acb21a7
Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.he.png differ
diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.nl.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.nl.png
new file mode 100644
index 00000000..9acb21a7
Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.nl.png differ
diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.fi.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.fi.png
new file mode 100644
index 00000000..1ced5fc1
Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.fi.png differ
diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.he.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.he.png
new file mode 100644
index 00000000..1ced5fc1
Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.he.png differ
diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.nl.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.nl.png
new file mode 100644
index 00000000..1ced5fc1
Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.nl.png differ
diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.fi.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.fi.png
new file mode 100644
index 00000000..7293ced1
Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.fi.png differ
diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.he.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.he.png
new file mode 100644
index 00000000..7293ced1
Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.he.png differ
diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.nl.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.nl.png
new file mode 100644
index 00000000..7293ced1
Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.nl.png differ
diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.fi.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.fi.png
new file mode 100644
index 00000000..be837c63
Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.fi.png differ
diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.he.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.he.png
new file mode 100644
index 00000000..be837c63
Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.he.png differ
diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.nl.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.nl.png
new file mode 100644
index 00000000..be837c63
Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.nl.png differ
diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.fi.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.fi.png
new file mode 100644
index 00000000..73861107
Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.fi.png differ
diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.he.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.he.png
new file mode 100644
index 00000000..73861107
Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.he.png differ
diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.nl.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.nl.png
new file mode 100644
index 00000000..73861107
Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.nl.png differ
diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.fi.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.fi.png
new file mode 100644
index 00000000..1b26d7ff
Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.fi.png differ
diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.he.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.he.png
new file mode 100644
index 00000000..1b26d7ff
Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.he.png differ
diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.nl.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.nl.png
new file mode 100644
index 00000000..1b26d7ff
Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.nl.png differ
diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.fi.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.fi.png
new file mode 100644
index 00000000..f1905ecc
Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.fi.png differ
diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.he.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.he.png
new file mode 100644
index 00000000..f1905ecc
Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.he.png differ
diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.nl.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.nl.png
new file mode 100644
index 00000000..f1905ecc
Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.nl.png differ
diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.fi.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.fi.png
new file mode 100644
index 00000000..edc44fa9
Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.fi.png differ
diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.he.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.he.png
new file mode 100644
index 00000000..edc44fa9
Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.he.png differ
diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.nl.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.nl.png
new file mode 100644
index 00000000..edc44fa9
Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.nl.png differ
diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.fi.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.fi.png
new file mode 100644
index 00000000..87854d3a
Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.fi.png differ
diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.he.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.he.png
new file mode 100644
index 00000000..87854d3a
Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.he.png differ
diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.nl.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.nl.png
new file mode 100644
index 00000000..87854d3a
Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.nl.png differ
diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.fi.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.fi.png
new file mode 100644
index 00000000..d1158e0d
Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.fi.png differ
diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.he.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.he.png
new file mode 100644
index 00000000..d1158e0d
Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.he.png differ
diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.nl.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.nl.png
new file mode 100644
index 00000000..d1158e0d
Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.nl.png differ
diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.fi.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.fi.png
new file mode 100644
index 00000000..122abea4
Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.fi.png differ
diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.he.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.he.png
new file mode 100644
index 00000000..122abea4
Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.he.png differ
diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.nl.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.nl.png
new file mode 100644
index 00000000..122abea4
Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.nl.png differ
diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.fi.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.fi.png
new file mode 100644
index 00000000..dc009aa5
Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.fi.png differ
diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.he.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.he.png
new file mode 100644
index 00000000..dc009aa5
Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.he.png differ
diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.nl.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.nl.png
new file mode 100644
index 00000000..dc009aa5
Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.nl.png differ
diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.fi.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.fi.png
new file mode 100644
index 00000000..ccb0d4e1
Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.fi.png differ
diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.he.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.he.png
new file mode 100644
index 00000000..ccb0d4e1
Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.he.png differ
diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.nl.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.nl.png
new file mode 100644
index 00000000..ccb0d4e1
Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.nl.png differ
diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.fi.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.fi.png
new file mode 100644
index 00000000..ccb0d4e1
Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.fi.png differ
diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.he.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.he.png
new file mode 100644
index 00000000..ccb0d4e1
Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.he.png differ
diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.nl.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.nl.png
new file mode 100644
index 00000000..ccb0d4e1
Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.nl.png differ
diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.fi.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.fi.png
new file mode 100644
index 00000000..12274b8b
Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.fi.png differ
diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.he.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.he.png
new file mode 100644
index 00000000..12274b8b
Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.he.png differ
diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.nl.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.nl.png
new file mode 100644
index 00000000..12274b8b
Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.nl.png differ
diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.fi.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.fi.png
new file mode 100644
index 00000000..da226797
Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.fi.png differ
diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.he.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.he.png
new file mode 100644
index 00000000..da226797
Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.he.png differ
diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.nl.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.nl.png
new file mode 100644
index 00000000..da226797
Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.nl.png differ
diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.fi.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.fi.png
new file mode 100644
index 00000000..67bd8a82
Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.fi.png differ
diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.he.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.he.png
new file mode 100644
index 00000000..67bd8a82
Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.he.png differ
diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.nl.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.nl.png
new file mode 100644
index 00000000..67bd8a82
Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.nl.png differ
diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.fi.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.fi.png
new file mode 100644
index 00000000..18938f59
Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.fi.png differ
diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.he.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.he.png
new file mode 100644
index 00000000..18938f59
Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.he.png differ
diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.nl.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.nl.png
new file mode 100644
index 00000000..18938f59
Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.nl.png differ
diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.fi.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.fi.png
new file mode 100644
index 00000000..db480604
Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.fi.png differ
diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.he.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.he.png
new file mode 100644
index 00000000..db480604
Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.he.png differ
diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.nl.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.nl.png
new file mode 100644
index 00000000..db480604
Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.nl.png differ
diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.fi.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.fi.png
new file mode 100644
index 00000000..535e5798
Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.fi.png differ
diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.he.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.he.png
new file mode 100644
index 00000000..535e5798
Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.he.png differ
diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.nl.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.nl.png
new file mode 100644
index 00000000..535e5798
Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.nl.png differ
diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.fi.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.fi.png
new file mode 100644
index 00000000..b3d83ab7
Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.fi.png differ
diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.he.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.he.png
new file mode 100644
index 00000000..b3d83ab7
Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.he.png differ
diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.nl.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.nl.png
new file mode 100644
index 00000000..b3d83ab7
Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.nl.png differ
diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.fi.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.fi.png
new file mode 100644
index 00000000..4bb97d60
Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.fi.png differ
diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.he.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.he.png
new file mode 100644
index 00000000..4bb97d60
Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.he.png differ
diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.nl.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.nl.png
new file mode 100644
index 00000000..4bb97d60
Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.nl.png differ
diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.fi.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.fi.jpg
new file mode 100644
index 00000000..4cf0d73d
Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.fi.jpg differ
diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.he.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.he.jpg
new file mode 100644
index 00000000..4cf0d73d
Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.he.jpg differ
diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.nl.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.nl.jpg
new file mode 100644
index 00000000..4cf0d73d
Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.nl.jpg differ
diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.fi.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.fi.png
new file mode 100644
index 00000000..0aace880
Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.fi.png differ
diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.he.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.he.png
new file mode 100644
index 00000000..0aace880
Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.he.png differ
diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.nl.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.nl.png
new file mode 100644
index 00000000..0aace880
Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.nl.png differ
diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.fi.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.fi.png
new file mode 100644
index 00000000..b19b1f6b
Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.fi.png differ
diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.he.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.he.png
new file mode 100644
index 00000000..b19b1f6b
Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.he.png differ
diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.nl.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.nl.png
new file mode 100644
index 00000000..b19b1f6b
Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.nl.png differ
diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.fi.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.fi.jpg
new file mode 100644
index 00000000..827670ed
Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.fi.jpg differ
diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.he.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.he.jpg
new file mode 100644
index 00000000..827670ed
Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.he.jpg differ
diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.nl.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.nl.jpg
new file mode 100644
index 00000000..827670ed
Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.nl.jpg differ
diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.fi.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.fi.png
new file mode 100644
index 00000000..435f901a
Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.fi.png differ
diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.he.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.he.png
new file mode 100644
index 00000000..435f901a
Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.he.png differ
diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.nl.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.nl.png
new file mode 100644
index 00000000..435f901a
Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.nl.png differ
diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.fi.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.fi.png
new file mode 100644
index 00000000..7308a1d1
Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.fi.png differ
diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.he.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.he.png
new file mode 100644
index 00000000..7308a1d1
Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.he.png differ
diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.nl.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.nl.png
new file mode 100644
index 00000000..7308a1d1
Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.nl.png differ
diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.fi.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.fi.png
new file mode 100644
index 00000000..8454c4d2
Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.fi.png differ
diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.he.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.he.png
new file mode 100644
index 00000000..8454c4d2
Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.he.png differ
diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.nl.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.nl.png
new file mode 100644
index 00000000..8454c4d2
Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.nl.png differ
diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.fi.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.fi.png
new file mode 100644
index 00000000..324b711d
Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.fi.png differ
diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.he.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.he.png
new file mode 100644
index 00000000..324b711d
Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.he.png differ
diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.nl.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.nl.png
new file mode 100644
index 00000000..324b711d
Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.nl.png differ
diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.fi.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.fi.png
new file mode 100644
index 00000000..ddfb42aa
Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.fi.png differ
diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.he.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.he.png
new file mode 100644
index 00000000..ddfb42aa
Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.he.png differ
diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.nl.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.nl.png
new file mode 100644
index 00000000..ddfb42aa
Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.nl.png differ
diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.fi.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.fi.png
new file mode 100644
index 00000000..280f2fe0
Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.fi.png differ
diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.he.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.he.png
new file mode 100644
index 00000000..280f2fe0
Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.he.png differ
diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.nl.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.nl.png
new file mode 100644
index 00000000..280f2fe0
Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.nl.png differ
diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.fi.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.fi.jpg
new file mode 100644
index 00000000..89b581ef
Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.fi.jpg differ
diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.he.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.he.jpg
new file mode 100644
index 00000000..89b581ef
Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.he.jpg differ
diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.nl.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.nl.jpg
new file mode 100644
index 00000000..89b581ef
Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.nl.jpg differ
diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.fi.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.fi.jpg
new file mode 100644
index 00000000..6efd2da1
Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.fi.jpg differ
diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.he.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.he.jpg
new file mode 100644
index 00000000..6efd2da1
Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.he.jpg differ
diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.nl.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.nl.jpg
new file mode 100644
index 00000000..6efd2da1
Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.nl.jpg differ
diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.fi.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.fi.png
new file mode 100644
index 00000000..348fe7a0
Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.fi.png differ
diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.he.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.he.png
new file mode 100644
index 00000000..348fe7a0
Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.he.png differ
diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.nl.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.nl.png
new file mode 100644
index 00000000..348fe7a0
Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.nl.png differ
diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.fi.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.fi.png
new file mode 100644
index 00000000..a69e73f4
Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.fi.png differ
diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.he.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.he.png
new file mode 100644
index 00000000..a69e73f4
Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.he.png differ
diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.nl.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.nl.png
new file mode 100644
index 00000000..a69e73f4
Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.nl.png differ
diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.fi.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.fi.png
new file mode 100644
index 00000000..49b0ca9b
Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.fi.png differ
diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.he.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.he.png
new file mode 100644
index 00000000..49b0ca9b
Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.he.png differ
diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.nl.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.nl.png
new file mode 100644
index 00000000..49b0ca9b
Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.nl.png differ
diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.fi.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.fi.png
new file mode 100644
index 00000000..458a3c95
Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.fi.png differ
diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.he.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.he.png
new file mode 100644
index 00000000..458a3c95
Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.he.png differ
diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.nl.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.nl.png
new file mode 100644
index 00000000..458a3c95
Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.nl.png differ
diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.fi.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.fi.png
new file mode 100644
index 00000000..90b687c2
Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.fi.png differ
diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.he.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.he.png
new file mode 100644
index 00000000..90b687c2
Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.he.png differ
diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.nl.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.nl.png
new file mode 100644
index 00000000..90b687c2
Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.nl.png differ
diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.fi.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.fi.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.fi.png differ
diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.he.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.he.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.he.png differ
diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.nl.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.nl.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.nl.png differ
diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.fi.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.fi.png
new file mode 100644
index 00000000..e7ea8ab6
Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.fi.png differ
diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.he.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.he.png
new file mode 100644
index 00000000..e7ea8ab6
Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.he.png differ
diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.nl.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.nl.png
new file mode 100644
index 00000000..e7ea8ab6
Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.nl.png differ
diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.fi.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.fi.png
new file mode 100644
index 00000000..6f138cf9
Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.fi.png differ
diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.he.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.he.png
new file mode 100644
index 00000000..6f138cf9
Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.he.png differ
diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.nl.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.nl.png
new file mode 100644
index 00000000..6f138cf9
Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.nl.png differ
diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.fi.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.fi.png
new file mode 100644
index 00000000..2f5f2861
Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.fi.png differ
diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.he.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.he.png
new file mode 100644
index 00000000..2f5f2861
Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.he.png differ
diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.nl.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.nl.png
new file mode 100644
index 00000000..2f5f2861
Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.nl.png differ
diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.fi.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.fi.png
new file mode 100644
index 00000000..f2f1b63e
Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.fi.png differ
diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.he.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.he.png
new file mode 100644
index 00000000..f2f1b63e
Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.he.png differ
diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.nl.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.nl.png
new file mode 100644
index 00000000..f2f1b63e
Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.nl.png differ
diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.fi.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.fi.png
new file mode 100644
index 00000000..5643c164
Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.fi.png differ
diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.he.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.he.png
new file mode 100644
index 00000000..5643c164
Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.he.png differ
diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.nl.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.nl.png
new file mode 100644
index 00000000..5643c164
Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.nl.png differ
diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.fi.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.fi.png
new file mode 100644
index 00000000..73fa30d1
Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.fi.png differ
diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.he.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.he.png
new file mode 100644
index 00000000..73fa30d1
Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.he.png differ
diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.nl.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.nl.png
new file mode 100644
index 00000000..73fa30d1
Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.nl.png differ
diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.fi.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.fi.png
new file mode 100644
index 00000000..eee39f7d
Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.fi.png differ
diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.he.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.he.png
new file mode 100644
index 00000000..eee39f7d
Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.he.png differ
diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.nl.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.nl.png
new file mode 100644
index 00000000..eee39f7d
Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.nl.png differ
diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.fi.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.fi.png
new file mode 100644
index 00000000..5a0fb117
Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.fi.png differ
diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.he.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.he.png
new file mode 100644
index 00000000..5a0fb117
Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.he.png differ
diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.nl.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.nl.png
new file mode 100644
index 00000000..5a0fb117
Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.nl.png differ
diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.fi.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.fi.png
new file mode 100644
index 00000000..27ddbfee
Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.fi.png differ
diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.he.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.he.png
new file mode 100644
index 00000000..27ddbfee
Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.he.png differ
diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.nl.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.nl.png
new file mode 100644
index 00000000..27ddbfee
Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.nl.png differ
diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.fi.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.fi.png
new file mode 100644
index 00000000..ee07bd10
Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.fi.png differ
diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.he.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.he.png
new file mode 100644
index 00000000..ee07bd10
Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.he.png differ
diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.nl.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.nl.png
new file mode 100644
index 00000000..ee07bd10
Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.nl.png differ
diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.fi.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.fi.png
new file mode 100644
index 00000000..37a2464a
Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.fi.png differ
diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.he.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.he.png
new file mode 100644
index 00000000..37a2464a
Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.he.png differ
diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.nl.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.nl.png
new file mode 100644
index 00000000..37a2464a
Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.nl.png differ
diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.fi.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.fi.png
new file mode 100644
index 00000000..d852153c
Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.fi.png differ
diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.he.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.he.png
new file mode 100644
index 00000000..d852153c
Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.he.png differ
diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.nl.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.nl.png
new file mode 100644
index 00000000..d852153c
Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.nl.png differ
diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.fi.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.fi.png
new file mode 100644
index 00000000..a457ac8d
Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.fi.png differ
diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.he.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.he.png
new file mode 100644
index 00000000..a457ac8d
Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.he.png differ
diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.nl.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.nl.png
new file mode 100644
index 00000000..a457ac8d
Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.nl.png differ
diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.fi.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.fi.png
new file mode 100644
index 00000000..3eccd326
Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.fi.png differ
diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.he.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.he.png
new file mode 100644
index 00000000..3eccd326
Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.he.png differ
diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.nl.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.nl.png
new file mode 100644
index 00000000..3eccd326
Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.nl.png differ
diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.fi.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.fi.png
new file mode 100644
index 00000000..49083372
Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.fi.png differ
diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.he.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.he.png
new file mode 100644
index 00000000..49083372
Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.he.png differ
diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.nl.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.nl.png
new file mode 100644
index 00000000..49083372
Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.nl.png differ
diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.fi.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.fi.png
new file mode 100644
index 00000000..1b4a94e5
Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.fi.png differ
diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.he.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.he.png
new file mode 100644
index 00000000..1b4a94e5
Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.he.png differ
diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.nl.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.nl.png
new file mode 100644
index 00000000..1b4a94e5
Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.nl.png differ
diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.fi.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.fi.png
new file mode 100644
index 00000000..8589e88f
Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.fi.png differ
diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.he.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.he.png
new file mode 100644
index 00000000..8589e88f
Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.he.png differ
diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.nl.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.nl.png
new file mode 100644
index 00000000..8589e88f
Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.nl.png differ
diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.fi.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.fi.png
new file mode 100644
index 00000000..e1246f56
Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.fi.png differ
diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.he.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.he.png
new file mode 100644
index 00000000..e1246f56
Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.he.png differ
diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.nl.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.nl.png
new file mode 100644
index 00000000..e1246f56
Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.nl.png differ
diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.fi.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.fi.png
new file mode 100644
index 00000000..db66a52b
Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.fi.png differ
diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.he.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.he.png
new file mode 100644
index 00000000..db66a52b
Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.he.png differ
diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.nl.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.nl.png
new file mode 100644
index 00000000..db66a52b
Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.nl.png differ
diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.fi.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.fi.png
new file mode 100644
index 00000000..66c76c2f
Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.fi.png differ
diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.he.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.he.png
new file mode 100644
index 00000000..66c76c2f
Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.he.png differ
diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.nl.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.nl.png
new file mode 100644
index 00000000..66c76c2f
Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.nl.png differ
diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.fi.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.fi.png
new file mode 100644
index 00000000..450b824c
Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.fi.png differ
diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.he.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.he.png
new file mode 100644
index 00000000..450b824c
Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.he.png differ
diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.nl.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.nl.png
new file mode 100644
index 00000000..450b824c
Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.nl.png differ
diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.fi.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.fi.png
new file mode 100644
index 00000000..615bc7a9
Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.fi.png differ
diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.he.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.he.png
new file mode 100644
index 00000000..615bc7a9
Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.he.png differ
diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.nl.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.nl.png
new file mode 100644
index 00000000..615bc7a9
Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.nl.png differ
diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.fi.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.fi.png
new file mode 100644
index 00000000..3c9e2930
Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.fi.png differ
diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.he.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.he.png
new file mode 100644
index 00000000..3c9e2930
Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.he.png differ
diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.nl.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.nl.png
new file mode 100644
index 00000000..3c9e2930
Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.nl.png differ
diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.fi.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.fi.png
new file mode 100644
index 00000000..e4bb0186
Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.fi.png differ
diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.he.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.he.png
new file mode 100644
index 00000000..e4bb0186
Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.he.png differ
diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.nl.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.nl.png
new file mode 100644
index 00000000..e4bb0186
Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.nl.png differ
diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.fi.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.fi.png
new file mode 100644
index 00000000..91e4cba6
Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.fi.png differ
diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.he.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.he.png
new file mode 100644
index 00000000..91e4cba6
Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.he.png differ
diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.nl.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.nl.png
new file mode 100644
index 00000000..91e4cba6
Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.nl.png differ
diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.fi.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.fi.png
new file mode 100644
index 00000000..91230d0c
Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.fi.png differ
diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.he.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.he.png
new file mode 100644
index 00000000..91230d0c
Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.he.png differ
diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.nl.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.nl.png
new file mode 100644
index 00000000..91230d0c
Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.nl.png differ
diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.fi.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.fi.png
new file mode 100644
index 00000000..128cd4a9
Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.fi.png differ
diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.he.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.he.png
new file mode 100644
index 00000000..128cd4a9
Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.he.png differ
diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.nl.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.nl.png
new file mode 100644
index 00000000..128cd4a9
Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.nl.png differ
diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.fi.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.fi.png
new file mode 100644
index 00000000..8d62d827
Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.fi.png differ
diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.he.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.he.png
new file mode 100644
index 00000000..8d62d827
Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.he.png differ
diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.nl.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.nl.png
new file mode 100644
index 00000000..8d62d827
Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.nl.png differ
diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.fi.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.fi.png
new file mode 100644
index 00000000..a84ab661
Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.fi.png differ
diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.he.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.he.png
new file mode 100644
index 00000000..a84ab661
Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.he.png differ
diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.nl.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.nl.png
new file mode 100644
index 00000000..a84ab661
Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.nl.png differ
diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.fi.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.fi.png
new file mode 100644
index 00000000..4c88d3d3
Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.fi.png differ
diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.he.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.he.png
new file mode 100644
index 00000000..4c88d3d3
Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.he.png differ
diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.nl.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.nl.png
new file mode 100644
index 00000000..4c88d3d3
Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.nl.png differ
diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.fi.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.fi.png
new file mode 100644
index 00000000..bc1895b8
Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.fi.png differ
diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.he.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.he.png
new file mode 100644
index 00000000..bc1895b8
Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.he.png differ
diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.nl.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.nl.png
new file mode 100644
index 00000000..bc1895b8
Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.nl.png differ
diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.fi.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.fi.png
new file mode 100644
index 00000000..d8ff3180
Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.fi.png differ
diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.he.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.he.png
new file mode 100644
index 00000000..d8ff3180
Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.he.png differ
diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.nl.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.nl.png
new file mode 100644
index 00000000..d8ff3180
Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.nl.png differ
diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.fi.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.fi.png
new file mode 100644
index 00000000..06b86a65
Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.fi.png differ
diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.he.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.he.png
new file mode 100644
index 00000000..06b86a65
Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.he.png differ
diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.nl.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.nl.png
new file mode 100644
index 00000000..06b86a65
Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.nl.png differ
diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.fi.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.fi.png
new file mode 100644
index 00000000..ac7aa47a
Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.fi.png differ
diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.he.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.he.png
new file mode 100644
index 00000000..ac7aa47a
Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.he.png differ
diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.nl.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.nl.png
new file mode 100644
index 00000000..ac7aa47a
Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.nl.png differ
diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.fi.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.fi.png
new file mode 100644
index 00000000..20480a22
Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.fi.png differ
diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.he.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.he.png
new file mode 100644
index 00000000..20480a22
Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.he.png differ
diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.nl.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.nl.png
new file mode 100644
index 00000000..20480a22
Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.nl.png differ
diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.fi.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.fi.png
new file mode 100644
index 00000000..9d90f435
Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.fi.png differ
diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.he.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.he.png
new file mode 100644
index 00000000..9d90f435
Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.he.png differ
diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.nl.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.nl.png
new file mode 100644
index 00000000..9d90f435
Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.nl.png differ
diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.fi.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.fi.png
new file mode 100644
index 00000000..27b0ea2c
Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.fi.png differ
diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.he.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.he.png
new file mode 100644
index 00000000..27b0ea2c
Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.he.png differ
diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.nl.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.nl.png
new file mode 100644
index 00000000..27b0ea2c
Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.nl.png differ
diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.fi.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.fi.png
new file mode 100644
index 00000000..3526a6d0
Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.fi.png differ
diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.he.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.he.png
new file mode 100644
index 00000000..3526a6d0
Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.he.png differ
diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.nl.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.nl.png
new file mode 100644
index 00000000..3526a6d0
Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.nl.png differ
diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.fi.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.fi.png
new file mode 100644
index 00000000..855d442e
Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.fi.png differ
diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.he.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.he.png
new file mode 100644
index 00000000..855d442e
Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.he.png differ
diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.nl.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.nl.png
new file mode 100644
index 00000000..855d442e
Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.nl.png differ
diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.fi.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.fi.png
new file mode 100644
index 00000000..aed3d813
Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.fi.png differ
diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.he.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.he.png
new file mode 100644
index 00000000..aed3d813
Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.he.png differ
diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.nl.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.nl.png
new file mode 100644
index 00000000..aed3d813
Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.nl.png differ
diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.fi.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.fi.png
new file mode 100644
index 00000000..9bfca6c2
Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.fi.png differ
diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.he.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.he.png
new file mode 100644
index 00000000..9bfca6c2
Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.he.png differ
diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.nl.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.nl.png
new file mode 100644
index 00000000..9bfca6c2
Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.nl.png differ
diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.fi.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.fi.png
new file mode 100644
index 00000000..0490e302
Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.fi.png differ
diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.he.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.he.png
new file mode 100644
index 00000000..0490e302
Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.he.png differ
diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.nl.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.nl.png
new file mode 100644
index 00000000..0490e302
Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.nl.png differ
diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.fi.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.fi.png
new file mode 100644
index 00000000..676e2378
Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.fi.png differ
diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.he.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.he.png
new file mode 100644
index 00000000..676e2378
Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.he.png differ
diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.nl.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.nl.png
new file mode 100644
index 00000000..676e2378
Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.nl.png differ
diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.fi.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.fi.png
new file mode 100644
index 00000000..280e18c3
Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.fi.png differ
diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.he.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.he.png
new file mode 100644
index 00000000..280e18c3
Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.he.png differ
diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.nl.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.nl.png
new file mode 100644
index 00000000..280e18c3
Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.nl.png differ
diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.fi.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.fi.png
new file mode 100644
index 00000000..bb70a905
Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.fi.png differ
diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.he.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.he.png
new file mode 100644
index 00000000..bb70a905
Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.he.png differ
diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.nl.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.nl.png
new file mode 100644
index 00000000..bb70a905
Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.nl.png differ
diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.fi.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.fi.png
new file mode 100644
index 00000000..c0860d6e
Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.fi.png differ
diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.he.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.he.png
new file mode 100644
index 00000000..c0860d6e
Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.he.png differ
diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.nl.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.nl.png
new file mode 100644
index 00000000..c0860d6e
Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.nl.png differ
diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.fi.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.fi.png
new file mode 100644
index 00000000..9a34d708
Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.fi.png differ
diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.he.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.he.png
new file mode 100644
index 00000000..9a34d708
Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.he.png differ
diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.nl.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.nl.png
new file mode 100644
index 00000000..9a34d708
Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.nl.png differ
diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.fi.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.fi.png
new file mode 100644
index 00000000..2c683d8b
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.fi.png differ
diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.he.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.he.png
new file mode 100644
index 00000000..2c683d8b
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.he.png differ
diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.nl.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.nl.png
new file mode 100644
index 00000000..2c683d8b
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.nl.png differ
diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.fi.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.fi.png
new file mode 100644
index 00000000..1ba4c5b0
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.fi.png differ
diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.he.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.he.png
new file mode 100644
index 00000000..1ba4c5b0
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.he.png differ
diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.nl.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.nl.png
new file mode 100644
index 00000000..1ba4c5b0
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.nl.png differ
diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.fi.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.fi.png
new file mode 100644
index 00000000..93aa3743
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.fi.png differ
diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.he.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.he.png
new file mode 100644
index 00000000..93aa3743
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.he.png differ
diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.nl.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.nl.png
new file mode 100644
index 00000000..93aa3743
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.nl.png differ
diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.fi.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.fi.png
new file mode 100644
index 00000000..3089e5e1
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.fi.png differ
diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.he.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.he.png
new file mode 100644
index 00000000..3089e5e1
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.he.png differ
diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.nl.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.nl.png
new file mode 100644
index 00000000..3089e5e1
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.nl.png differ
diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.fi.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.fi.png
new file mode 100644
index 00000000..53468420
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.fi.png differ
diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.he.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.he.png
new file mode 100644
index 00000000..53468420
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.he.png differ
diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.nl.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.nl.png
new file mode 100644
index 00000000..53468420
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.nl.png differ
diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.fi.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.fi.png
new file mode 100644
index 00000000..003dc174
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.fi.png differ
diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.he.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.he.png
new file mode 100644
index 00000000..003dc174
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.he.png differ
diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.nl.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.nl.png
new file mode 100644
index 00000000..003dc174
Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.nl.png differ
diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.fi.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.fi.png
new file mode 100644
index 00000000..3c0d2f87
Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.fi.png differ
diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.he.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.he.png
new file mode 100644
index 00000000..3c0d2f87
Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.he.png differ
diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.nl.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.nl.png
new file mode 100644
index 00000000..3c0d2f87
Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.nl.png differ
diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.fi.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.fi.png
new file mode 100644
index 00000000..56f285f2
Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.fi.png differ
diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.he.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.he.png
new file mode 100644
index 00000000..56f285f2
Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.he.png differ
diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.nl.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.nl.png
new file mode 100644
index 00000000..56f285f2
Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.nl.png differ
diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.fi.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.fi.png
new file mode 100644
index 00000000..ec8bbe2f
Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.fi.png differ
diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.he.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.he.png
new file mode 100644
index 00000000..ec8bbe2f
Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.he.png differ
diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.nl.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.nl.png
new file mode 100644
index 00000000..ec8bbe2f
Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.nl.png differ
diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.fi.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.fi.png
new file mode 100644
index 00000000..bbaae894
Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.fi.png differ
diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.he.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.he.png
new file mode 100644
index 00000000..bbaae894
Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.he.png differ
diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.nl.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.nl.png
new file mode 100644
index 00000000..bbaae894
Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.nl.png differ
diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.fi.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.fi.png
new file mode 100644
index 00000000..ef71f6da
Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.fi.png differ
diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.he.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.he.png
new file mode 100644
index 00000000..ef71f6da
Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.he.png differ
diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.nl.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.nl.png
new file mode 100644
index 00000000..ef71f6da
Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.nl.png differ
diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.fi.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.fi.png
new file mode 100644
index 00000000..4e9390eb
Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.fi.png differ
diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.he.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.he.png
new file mode 100644
index 00000000..4e9390eb
Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.he.png differ
diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.nl.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.nl.png
new file mode 100644
index 00000000..4e9390eb
Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.nl.png differ
diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.fi.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.fi.png
new file mode 100644
index 00000000..16d7af80
Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.fi.png differ
diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.he.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.he.png
new file mode 100644
index 00000000..16d7af80
Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.he.png differ
diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.nl.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.nl.png
new file mode 100644
index 00000000..16d7af80
Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.nl.png differ
diff --git a/translations/fi/1-getting-started/README.md b/translations/fi/1-getting-started/README.md
new file mode 100644
index 00000000..631e7c52
--- /dev/null
+++ b/translations/fi/1-getting-started/README.md
@@ -0,0 +1,30 @@
+
+# Aloitus IoT:n parissa
+
+Tässä opetussuunnitelman osiossa tutustut esineiden internetiin (IoT) ja opit peruskäsitteitä, mukaan lukien ensimmäisen 'Hello World' IoT-projektisi rakentamisen ja pilveen yhdistämisen. Tämä projekti on yövalo, joka syttyy, kun anturin mittaama valotaso laskee.
+
+
+
+## Aiheet
+
+1. [Johdatus IoT:hen](lessons/1-introduction-to-iot/README.md)
+1. [Syvällisempi katsaus IoT:hen](lessons/2-deeper-dive/README.md)
+1. [Vuorovaikutus fyysisen maailman kanssa antureiden ja toimilaitteiden avulla](lessons/3-sensors-and-actuators/README.md)
+1. [Yhdistä laitteesi Internetiin](lessons/4-connect-internet/README.md)
+
+## Kiitokset
+
+Kaikki oppitunnit on kirjoitettu ♥️:lla [Jim Bennettin](https://GitHub.com/JimBobBennett) toimesta.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/1-introduction-to-iot/README.md b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/README.md
new file mode 100644
index 00000000..3798eaa7
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/README.md
@@ -0,0 +1,242 @@
+
+# Johdanto IoT:hen
+
+
+
+> Sketchnoten on tehnyt [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+Tämä oppitunti oli osa [Hello IoT -sarjaa](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) [Microsoft Reactorilta](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Oppitunti koostui kahdesta videosta: tunnin mittaisesta oppitunnista ja tunnin mittaisesta toimistotunnista, jossa syvennyttiin oppitunnin osiin ja vastattiin kysymyksiin.
+
+[](https://youtu.be/bVFfcYh6UBw)
+
+[](https://youtu.be/YI772q5v3yI)
+
+> 🎥 Klikkaa yllä olevia kuvia katsoaksesi videot
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/1)
+
+## Johdanto
+
+Tässä oppitunnissa käsitellään joitakin Internet of Thingsin (IoT) perusaiheita ja opastetaan laitteiston käyttöönotossa.
+
+Tässä oppitunnissa käsitellään:
+
+* [Mikä on 'Internet of Things'?](../../../../../1-getting-started/lessons/1-introduction-to-iot)
+* [IoT-laitteet](../../../../../1-getting-started/lessons/1-introduction-to-iot)
+* [Laitteen käyttöönotto](../../../../../1-getting-started/lessons/1-introduction-to-iot)
+* [IoT:n sovellukset](../../../../../1-getting-started/lessons/1-introduction-to-iot)
+* [Esimerkkejä IoT-laitteista ympärilläsi](../../../../../1-getting-started/lessons/1-introduction-to-iot)
+
+## Mikä on 'Internet of Things'?
+
+Termi 'Internet of Things' (IoT) lanseerattiin vuonna 1999 [Kevin Ashtonin](https://wikipedia.org/wiki/Kevin_Ashton) toimesta, ja sillä viitattiin Internetin yhdistämiseen fyysiseen maailmaan sensoreiden avulla. Sittemmin termiä on käytetty kuvaamaan mitä tahansa laitetta, joka on vuorovaikutuksessa ympäröivän fyysisen maailman kanssa joko keräämällä tietoa sensoreilla tai tarjoamalla reaalimaailman toimintoja aktuaattoreilla (laitteilla, jotka tekevät jotain, kuten kytkevät kytkimen päälle tai sytyttävät LEDin), yleensä yhteydessä muihin laitteisiin tai Internetiin.
+
+> **Sensorit** keräävät tietoa maailmasta, kuten mittaavat nopeutta, lämpötilaa tai sijaintia.
+>
+> **Aktuaattorit** muuntavat sähköiset signaalit reaalimaailman toiminnoiksi, kuten kytkimen laukaisemiseksi, valojen sytyttämiseksi, äänten tuottamiseksi tai ohjaussignaalien lähettämiseksi muille laitteille, esimerkiksi pistorasian kytkemiseksi päälle.
+
+IoT on enemmän kuin vain laitteita - siihen kuuluu pilvipohjaisia palveluita, jotka voivat käsitellä sensoritietoja tai lähettää pyyntöjä IoT-laitteisiin kytketyille aktuaattoreille. Se sisältää myös laitteita, joilla ei ole tai jotka eivät tarvitse Internet-yhteyttä, ja joita kutsutaan usein reunalaitteiksi. Nämä laitteet voivat käsitellä ja vastata sensoritietoihin itsenäisesti, yleensä pilvessä koulutettujen tekoälymallien avulla.
+
+IoT on nopeasti kasvava teknologia-alue. Arvioiden mukaan vuoden 2020 loppuun mennessä oli otettu käyttöön ja yhdistetty Internetiin 30 miljardia IoT-laitetta. Tulevaisuudessa arvioidaan, että vuoteen 2025 mennessä IoT-laitteet keräävät lähes 80 zettatavua dataa eli 80 biljoonaa gigatavua. Se on valtava määrä dataa!
+
+
+
+✅ Tee hieman tutkimusta: Kuinka suuri osa IoT-laitteiden tuottamasta datasta todella käytetään, ja kuinka paljon menee hukkaan? Miksi niin paljon dataa jätetään huomiotta?
+
+Tämä data on avain IoT:n menestykseen. Jotta voisit olla menestyksekäs IoT-kehittäjä, sinun täytyy ymmärtää, mitä dataa sinun täytyy kerätä, miten kerätä sitä, miten tehdä päätöksiä sen perusteella ja miten käyttää näitä päätöksiä vuorovaikutuksessa fyysisen maailman kanssa tarvittaessa.
+
+## IoT-laitteet
+
+IoT:n **T** tarkoittaa **Things** eli laitteita, jotka ovat vuorovaikutuksessa ympäröivän fyysisen maailman kanssa joko keräämällä tietoa sensoreilla tai tarjoamalla reaalimaailman toimintoja aktuaattoreilla.
+
+Tuotanto- tai kaupalliseen käyttöön tarkoitetut laitteet, kuten kuluttajien kuntoseurantalaitteet tai teollisuuden koneiden ohjaimet, ovat yleensä räätälöityjä. Ne käyttävät räätälöityjä piirilevyjä, mahdollisesti jopa räätälöityjä prosessoreita, jotka on suunniteltu vastaamaan tietyn tehtävän tarpeita, olipa kyseessä sitten riittävän pieni koko ranteeseen sopimiseksi tai kestävyys korkeassa lämpötilassa, kovassa rasituksessa tai tärinässä tehtaassa.
+
+Kehittäjänä, joka joko opettelee IoT:ta tai luo laitteen prototyyppiä, sinun täytyy aloittaa kehityspaketilla. Nämä ovat yleiskäyttöisiä IoT-laitteita, jotka on suunniteltu kehittäjien käyttöön, ja niissä on usein ominaisuuksia, joita tuotantolaitteessa ei olisi, kuten ulkoisia liittimiä sensoreiden tai aktuaattoreiden kytkemiseksi, laitteistoa virheenkorjaukseen tai lisäresursseja, jotka lisäisivät tarpeettomia kustannuksia suurissa valmistuserissä.
+
+Nämä kehityspaketit jakautuvat yleensä kahteen kategoriaan - mikrokontrollereihin ja yhden piirilevyn tietokoneisiin. Näitä esitellään tässä, ja seuraavassa oppitunnissa mennään yksityiskohtaisemmin.
+
+> 💁 Puhelintasi voidaan myös pitää yleiskäyttöisenä IoT-laitteena, jossa on sisäänrakennettuja sensoreita ja aktuaattoreita. Eri sovellukset käyttävät näitä sensoreita ja aktuaattoreita eri tavoin eri pilvipalveluiden kanssa. Löydät jopa IoT-opetusohjelmia, joissa käytetään puhelinsovellusta IoT-laitteena.
+
+### Mikrokontrollerit
+
+Mikrokontrolleri (tunnetaan myös nimellä MCU, lyhenne sanoista microcontroller unit) on pieni tietokone, joka koostuu:
+
+🧠 Yhdestä tai useammasta keskusyksiköstä (CPU) - mikrokontrollerin "aivot", jotka suorittavat ohjelmasi
+
+💾 Muistista (RAM ja ohjelmamuisti) - paikka, jossa ohjelmasi, datasi ja muuttujasi säilytetään
+
+🔌 Ohjelmoitavista tulo-/lähtöliitännöistä (I/O) - ulkoisten oheislaitteiden (kuten sensoreiden ja aktuaattoreiden) kanssa kommunikointiin
+
+Mikrokontrollerit ovat tyypillisesti edullisia laskentalaitteita, joiden keskimääräiset hinnat mukautetussa laitteistossa ovat noin 0,50 USD, ja jotkut laitteet maksavat vain 0,03 USD. Kehityspaketit voivat maksaa alkaen 4 USD, ja hinnat nousevat ominaisuuksien lisääntyessä. [Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html), mikrokontrollerikehityspaketti [Seeed Studiosilta](https://www.seeedstudio.com), jossa on sensoreita, aktuaattoreita, WiFi ja näyttö, maksaa noin 30 USD.
+
+
+
+> 💁 Kun etsit mikrokontrollereita Internetistä, ole varovainen hakusanalla **MCU**, sillä se tuo paljon tuloksia Marvelin elokuvauniversumista, ei mikrokontrollereista.
+
+Mikrokontrollerit on suunniteltu ohjelmoitaviksi suorittamaan rajallinen määrä hyvin spesifisiä tehtäviä, eikä niitä ole tarkoitettu yleiskäyttöisiksi tietokoneiksi kuten PC:t tai Macit. Paitsi hyvin erityisissä tilanteissa, et voi liittää niihin näyttöä, näppäimistöä ja hiirtä ja käyttää niitä yleiskäyttöisiin tehtäviin.
+
+Mikrokontrollerikehityspaketeissa on yleensä mukana lisäsensoreita ja aktuaattoreita. Useimmissa korteissa on yksi tai useampi ohjelmoitava LED sekä muita laitteita, kuten standardiliittimiä lisäsensoreiden tai aktuaattoreiden liittämiseen eri valmistajien ekosysteemeihin tai sisäänrakennettuja sensoreita (yleensä suosituimpia, kuten lämpötila-antureita). Joissakin mikrokontrollereissa on sisäänrakennettu langaton yhteys, kuten Bluetooth tai WiFi, tai lisämikrokontrollereita, jotka lisäävät tämän yhteyden.
+
+> 💁 Mikrokontrollereita ohjelmoidaan yleensä C/C++-kielellä.
+
+### Yhden piirilevyn tietokoneet
+
+Yhden piirilevyn tietokone on pieni laskentalaite, joka sisältää kaikki täysimittaisen tietokoneen osat yhdellä pienellä piirilevyllä. Nämä laitteet ovat ominaisuuksiltaan lähellä pöytätietokonetta tai kannettavaa, käyttävät täysimittaista käyttöjärjestelmää, mutta ovat pienempiä, kuluttavat vähemmän virtaa ja ovat huomattavasti halvempia.
+
+
+
+Raspberry Pi on yksi suosituimmista yhden piirilevyn tietokoneista.
+
+Kuten mikrokontrollerit, yhden piirilevyn tietokoneissa on CPU, muisti ja tulo-/lähtöliitännät, mutta niissä on myös lisäominaisuuksia, kuten grafiikkapiiri näyttöjen liittämiseen, äänilähdöt ja USB-portit näppäimistöjen, hiirien ja muiden standardien USB-laitteiden, kuten verkkokameroiden tai ulkoisten tallennuslaitteiden, liittämiseen. Ohjelmat tallennetaan SD-korteille tai kiintolevyille käyttöjärjestelmän kanssa, eikä piirilevyyn sisäänrakennettuun muistiin.
+
+> 🎓 Voit ajatella yhden piirilevyn tietokonetta pienempänä, halvempana versiona PC:stä tai Macista, jolla luet tätä, ja jolla on lisäksi GPIO (yleiskäyttöiset tulo-/lähtöliitännät) sensoreiden ja aktuaattoreiden kanssa vuorovaikutukseen.
+
+Yhden piirilevyn tietokoneet ovat täysimittaisia tietokoneita, joten niitä voidaan ohjelmoida millä tahansa kielellä. IoT-laitteita ohjelmoidaan tyypillisesti Pythonilla.
+
+### Laitteistovalinnat loppuoppitunneille
+
+Kaikki seuraavat oppitunnit sisältävät tehtäviä, joissa käytetään IoT-laitetta vuorovaikutukseen fyysisen maailman kanssa ja kommunikointiin pilven kanssa. Jokainen oppitunti tukee kolmea laitevalintaa - Arduino (käyttäen Seeed Studiosin Wio Terminalia) tai yhden piirilevyn tietokonetta, joko fyysistä laitetta (Raspberry Pi 4) tai virtuaalista yhden piirilevyn tietokonetta, joka toimii PC:llä tai Macilla.
+
+Voit lukea tarvittavasta laitteistosta kaikkien tehtävien suorittamiseksi [laitteisto-oppaasta](../../../hardware.md).
+
+> 💁 Sinun ei tarvitse ostaa mitään IoT-laitteistoa tehtävien suorittamiseksi, voit tehdä kaiken virtuaalisella yhden piirilevyn tietokoneella.
+
+Minkä laitteiston valitset, riippuu siitä, mitä sinulla on saatavilla kotona tai koulussa, ja mitä ohjelmointikieltä osaat tai haluat oppia. Molemmat laitevaihtoehdot käyttävät samaa sensoriekosysteemiä, joten jos aloitat yhdellä polulla, voit vaihtaa toiseen ilman, että suurin osa laitteistosta täytyy korvata. Virtuaalinen yhden piirilevyn tietokone vastaa oppimista Raspberry Pi:llä, ja suurin osa koodista on siirrettävissä Pi:lle, jos hankit laitteen ja sensorit myöhemmin.
+
+### Arduino-kehityspaketti
+
+Jos olet kiinnostunut oppimaan mikrokontrollerikehitystä, voit suorittaa tehtävät Arduino-laitteella. Sinun täytyy ymmärtää perusteet C/C++-ohjelmoinnista, sillä oppitunnit opettavat vain koodia, joka liittyy Arduino-kehykseen, käytettäviin sensoreihin ja aktuaattoreihin sekä pilven kanssa vuorovaikuttaviin kirjastoihin.
+
+Tehtävissä käytetään [Visual Studio Codea](https://code.visualstudio.com/?WT.mc_id=academic-17441-jabenn) ja [PlatformIO-laajennusta mikrokontrollerikehitykseen](https://platformio.org). Voit myös käyttää Arduino IDE:tä, jos olet kokenut tämän työkalun käyttäjä, sillä ohjeita ei anneta.
+
+### Yhden piirilevyn tietokoneen kehityspaketti
+
+Jos olet kiinnostunut oppimaan IoT-kehitystä yhden piirilevyn tietokoneilla, voit suorittaa tehtävät Raspberry Pi:llä tai virtuaalisella laitteella, joka toimii PC:llä tai Macilla.
+
+Sinun täytyy ymmärtää Python-ohjelmoinnin perusteet, sillä oppitunnit opettavat vain koodia, joka liittyy käytettäviin sensoreihin ja aktuaattoreihin sekä pilven kanssa vuorovaikuttaviin kirjastoihin.
+
+> 💁 Jos haluat oppia Python-ohjelmointia, tutustu seuraaviin kahteen videosarjaan:
+>
+> * [Python aloittelijoille](https://channel9.msdn.com/Series/Intro-to-Python-Development?WT.mc_id=academic-17441-jabenn)
+> * [Lisää Pythonia aloittelijoille](https://channel9.msdn.com/Series/More-Python-for-Beginners?WT.mc_id=academic-7372-jabenn)
+
+Tehtävissä käytetään [Visual Studio Codea](https://code.visualstudio.com/?WT.mc_id=academic-17441-jabenn).
+
+Jos käytät Raspberry Pi:tä, voit joko käyttää Pi:täsi täysimittaisella Raspberry Pi OS -työpöytäversiolla ja tehdä kaiken koodauksen suoraan Pi:llä käyttäen [Raspberry Pi OS -versiota VS Codesta](https://code.visualstudio.com/docs/setup/raspberry-pi?WT.mc_id=academic-17441-jabenn), tai käyttää Pi:täsi päätelaitteena ja koodata PC:ltäsi tai Maciltasi käyttäen VS Codea ja [Remote SSH -laajennusta](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn), joka mahdollistaa yhteyden Pi:hin ja koodin muokkaamisen, virheenkorjauksen ja suorittamisen aivan kuin koodaisit suoraan sillä.
+
+Jos käytät virtuaalilaitetta, koodaat suoraan tietokoneellasi. Sensoreiden ja aktuaattoreiden sijaan käytät työkalua, joka simuloi tätä laitteistoa tarjoamalla sensoriarvoja, jotka voit määrittää, ja näyttämällä aktuaattoreiden tulokset näytöllä.
+
+## Laitteen käyttöönotto
+
+Ennen kuin voit aloittaa IoT-laitteesi ohjelmoinnin, sinun täytyy tehdä pieni määrä asetuksia. Seuraa alla olevia ohjeita riippuen siitä, mitä laitetta käytät.
+💁 Jos sinulla ei vielä ole laitetta, tutustu [laitteisto-oppaaseen](../../../hardware.md) auttaaksesi päättämään, mitä laitetta aiot käyttää ja mitä lisälaitteita sinun täytyy hankkia. Sinun ei tarvitse ostaa laitteistoa, sillä kaikki projektit voidaan suorittaa virtuaalisella laitteistolla.
+Nämä ohjeet sisältävät linkkejä kolmansien osapuolien verkkosivustoille, jotka ovat laitteiden tai työkalujen valmistajien luomia. Tämä varmistaa, että käytät aina ajantasaisimpia ohjeita eri työkaluille ja laitteille.
+
+Käy läpi asiaankuuluva opas asentaaksesi laitteesi ja suorittaaksesi "Hello World" -projektin. Tämä on ensimmäinen askel IoT-yövalon luomisessa neljän oppitunnin aikana tässä aloitusosiossa.
+
+* [Arduino - Wio Terminal](wio-terminal.md)
+* [Yksikorttitietokone - Raspberry Pi](pi.md)
+* [Yksikorttitietokone - Virtuaalilaite](virtual-device.md)
+
+✅ Käytät VS Codea sekä Arduinolle että yksikorttitietokoneille. Jos et ole käyttänyt sitä aiemmin, lue lisää [VS Code -sivustolta](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn).
+
+## IoT:n sovellukset
+
+IoT kattaa valtavan määrän käyttötapauksia, jotka jakautuvat muutamaan laajaan ryhmään:
+
+* Kuluttaja-IoT
+* Kaupallinen IoT
+* Teollinen IoT
+* Infrastruktuuri-IoT
+
+✅ Tee hieman tutkimusta: Etsi jokaiselle alla kuvatulle alueelle yksi konkreettinen esimerkki, jota ei ole mainittu tekstissä.
+
+### Kuluttaja-IoT
+
+Kuluttaja-IoT viittaa IoT-laitteisiin, joita kuluttajat ostavat ja käyttävät kotonaan. Jotkut näistä laitteista ovat erittäin hyödyllisiä, kuten älykaiuttimet, älylämmitysjärjestelmät ja robottipölynimurit. Toiset taas ovat kyseenalaisia hyödyllisyydessään, kuten ääniohjatut hanat, joita ei voi sulkea, koska ääniohjaus ei kuule sinua juoksevan veden äänen yli.
+
+Kuluttaja-IoT-laitteet antavat ihmisille mahdollisuuden saavuttaa enemmän ympäristössään, erityisesti miljardille ihmiselle, joilla on jokin vamma. Robottipölynimurit voivat tarjota puhtaat lattiat liikuntarajoitteisille, jotka eivät voi imuroida itse, ääniohjatut uunit mahdollistavat näkö- tai motoriikkarajoitteisille uunin lämmittämisen pelkällä äänellä, ja terveydenseurantalaitteet antavat potilaille mahdollisuuden seurata kroonisia sairauksiaan säännöllisemmin ja yksityiskohtaisemmin. Nämä laitteet ovat niin yleisiä, että jopa pienet lapset käyttävät niitä osana päivittäistä elämäänsä, esimerkiksi virtuaalikoulutusta käyvät oppilaat COVID-pandemian aikana asettavat ajastimia älykotilaitteilla seuratakseen koulutehtäviään tai muistutuksia tulevista oppitunneista.
+
+✅ Mitä kuluttaja-IoT-laitteita sinulla on kotonasi tai mukanasi?
+
+### Kaupallinen IoT
+
+Kaupallinen IoT kattaa IoT:n käytön työpaikoilla. Toimistoympäristössä voi olla tilan käyttöä mittaavia sensoreita ja liiketunnistimia, jotka hallitsevat valaistusta ja lämmitystä niin, että valot ja lämpö ovat päällä vain tarvittaessa, mikä vähentää kustannuksia ja hiilidioksidipäästöjä. Tehtaassa IoT-laitteet voivat valvoa turvallisuusriskejä, kuten työntekijöitä, jotka eivät käytä kypärää, tai melua, joka on saavuttanut vaarallisen tason. Kaupan alalla IoT-laitteet voivat mitata kylmäsäilytyksen lämpötilaa ja ilmoittaa kaupan omistajalle, jos jääkaappi tai pakastin on vaaditun lämpötila-alueen ulkopuolella, tai ne voivat seurata hyllyjen tuotteita ohjaten työntekijöitä täyttämään myytyjä tuotteita. Kuljetusalalla IoT:ta käytetään yhä enemmän ajoneuvojen sijainnin seuraamiseen, tienkäyttömaksujen kilometriseurantaan, kuljettajien työaikojen ja taukojen noudattamisen valvontaan tai henkilökunnan ilmoittamiseen, kun ajoneuvo lähestyy terminaalia lastausta tai purkua varten.
+
+✅ Mitä kaupallisia IoT-laitteita sinulla on koulussasi tai työpaikallasi?
+
+### Teollinen IoT (IIoT)
+
+Teollinen IoT, eli IIoT, tarkoittaa IoT-laitteiden käyttöä koneiden hallintaan ja ohjaukseen suuressa mittakaavassa. Tämä kattaa laajan valikoiman käyttötapauksia, tehtaista digitaaliseen maatalouteen.
+
+Tehtaissa IoT-laitteita käytetään monin eri tavoin. Koneita voidaan valvoa useilla sensoreilla, jotka seuraavat esimerkiksi lämpötilaa, värähtelyä ja pyörimisnopeutta. Näitä tietoja voidaan valvoa, jotta kone voidaan pysäyttää, jos se ylittää tietyt toleranssit - esimerkiksi jos se käy liian kuumana, se voidaan sammuttaa. Näitä tietoja voidaan myös kerätä ja analysoida ajan mittaan ennakoivaa huoltoa varten, jossa tekoälymallit tarkastelevat tietoja, jotka johtavat vikaantumiseen, ja käyttävät niitä ennustamaan muita vikoja ennen niiden tapahtumista.
+
+Digitaalinen maatalous on tärkeää, jotta planeetta pystyy ruokkimaan kasvavan väestön, erityisesti 2 miljardia ihmistä 500 miljoonassa kotitaloudessa, jotka elävät [omavaraisviljelyllä](https://wikipedia.org/wiki/Subsistence_agriculture). Digitaalinen maatalous voi vaihdella muutaman dollarin sensoreista massiivisiin kaupallisiin järjestelmiin. Viljelijä voi aloittaa seuraamalla lämpötiloja ja käyttämällä [kasvupäiväasteita](https://wikipedia.org/wiki/Growing_degree-day) ennustaakseen, milloin sato on valmis korjattavaksi. He voivat yhdistää maaperän kosteuden seurannan automatisoituihin kastelujärjestelmiin antaakseen kasveilleen juuri tarvittavan määrän vettä, mutta ei enempää, jotta heidän satonsa eivät kuivu ilman veden tuhlausta. Viljelijät menevät jopa pidemmälle ja käyttävät droneja, satelliittidataa ja tekoälyä valvoakseen sadon kasvua, sairauksia ja maaperän laatua valtavilla viljelyalueilla.
+
+✅ Mitä muita IoT-laitteita voisi auttaa viljelijöitä?
+
+### Infrastruktuuri-IoT
+
+Infrastruktuuri-IoT tarkoittaa paikallisen ja globaalin infrastruktuurin valvontaa ja hallintaa, jota ihmiset käyttävät päivittäin.
+
+[Älykaupungit](https://wikipedia.org/wiki/Smart_city) ovat kaupunkialueita, jotka käyttävät IoT-laitteita kerätäkseen tietoa kaupungista ja käyttävät sitä kaupungin toiminnan parantamiseen. Näitä kaupunkeja hallinnoidaan yleensä paikallishallinnon, akateemisten tahojen ja paikallisten yritysten yhteistyönä, ja niissä seurataan ja hallitaan asioita, kuten liikennettä, pysäköintiä ja saastumista. Esimerkiksi Kööpenhaminassa, Tanskassa, ilman saastuminen on tärkeää paikallisille asukkaille, joten sitä mitataan ja tietoja käytetään tarjoamaan tietoa puhtaimmista pyöräily- ja lenkkeilyreiteistä.
+
+[Älykkäät sähköverkot](https://wikipedia.org/wiki/Smart_grid) mahdollistavat paremman analytiikan sähkönkulutuksesta keräämällä käyttödataa yksittäisten kotien tasolla. Näitä tietoja voidaan käyttää päätöksentekoon maanlaajuisesti, kuten uusien voimalaitosten rakentamispaikkojen valintaan, ja henkilökohtaisella tasolla antamalla käyttäjille tietoa siitä, kuinka paljon sähköä he käyttävät, milloin he käyttävät sitä, ja jopa ehdotuksia kustannusten vähentämiseksi, kuten sähköautojen lataaminen yöllä.
+
+✅ Jos voisit lisätä IoT-laitteita mittaamaan mitä tahansa asuinalueellasi, mitä se olisi?
+
+## Esimerkkejä IoT-laitteista, joita sinulla saattaa olla ympärilläsi
+
+Olisit yllättynyt siitä, kuinka monta IoT-laitetta sinulla on ympärilläsi. Kirjoitan tätä kotona, ja minulla on seuraavat laitteet yhdistettynä Internetiin älyominaisuuksilla, kuten sovellusten ohjaus, ääniohjaus tai kyky lähettää tietoja puhelimeeni:
+
+* Useita älykaiuttimia
+* Jääkaappi, astianpesukone, uuni ja mikroaaltouuni
+* Sähkömittari aurinkopaneeleille
+* Älypistorasiat
+* Videokello ja turvakamerat
+* Älytermostaatti, jossa on useita älyhuonesensoreita
+* Autotallin oven avaaja
+* Kodin viihdejärjestelmät ja ääniohjatut televisiot
+* Valot
+* Kunto- ja terveydenseurantalaitteet
+
+Kaikilla näillä laitteilla on sensoreita ja/tai toimilaitteita, ja ne kommunikoivat Internetin kautta. Voin tarkistaa puhelimestani, onko autotallin ovi auki, ja pyytää älykaiutinta sulkemaan sen puolestani. Voin jopa asettaa sen ajastimelle, jotta jos se on vielä auki yöllä, se sulkeutuu automaattisesti. Kun ovikello soi, voin nähdä puhelimestani, kuka siellä on, missä tahansa olenkin maailmassa, ja puhua heille ovikelloon sisäänrakennetun kaiuttimen ja mikrofonin kautta. Voin seurata verensokeriani, sydämen sykettäni ja uneni laatua, etsiä datasta kaavoja parantaakseni terveyttäni. Voin ohjata valojani pilven kautta ja istua pimeässä, kun Internet-yhteys katkeaa.
+
+---
+
+## 🚀 Haaste
+
+Listaa niin monta IoT-laitetta kuin voit, jotka ovat kotonasi, koulussasi tai työpaikallasi - niitä saattaa olla enemmän kuin luulet!
+
+## Luentojälkeinen kysely
+
+[Luentojälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/2)
+
+## Kertaus ja itseopiskelu
+
+Lue kuluttaja-IoT-projektien hyödyistä ja epäonnistumisista. Tarkista uutissivustoilta artikkeleita siitä, milloin ne ovat menneet pieleen, kuten yksityisyysongelmat, laitteisto-ongelmat tai ongelmat, jotka johtuvat yhteyden puutteesta.
+
+Joistakin esimerkkejä:
+
+* Katso Twitter-tili **[Internet of Sh*t](https://twitter.com/internetofshit)** *(varoitus: kielenkäyttö)*, jossa on hyviä esimerkkejä kuluttaja-IoT:n epäonnistumisista.
+* [c|net - Apple Watch pelasti henkeni: 5 ihmistä jakaa tarinansa](https://www.cnet.com/news/apple-watch-lifesaving-health-features-read-5-peoples-stories/)
+* [c|net - ADT-teknikko myöntää syyllisyytensä asiakkaiden kamerasyötteiden vakoiluun vuosien ajan](https://www.cnet.com/news/adt-home-security-technician-pleads-guilty-to-spying-on-customer-camera-feeds-for-years/) *(varoitus: ei-toivottu voyeurismi)*
+
+## Tehtävä
+
+[Tutki IoT-projektia](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/1-introduction-to-iot/assignment.md b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/assignment.md
new file mode 100644
index 00000000..97e2cb43
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/assignment.md
@@ -0,0 +1,27 @@
+
+# Tutki IoT-projektia
+
+## Ohjeet
+
+Maailmalla toteutetaan monia suuria ja pieniä IoT-projekteja, kuten älymaataloutta ja älykaupunkeja, terveydenhuollon seurantaa, liikennettä ja julkisten tilojen käyttöä varten.
+
+Etsi verkosta tietoa projektista, joka kiinnostaa sinua, mieluiten sellaisesta, joka on lähellä asuinpaikkaasi. Selitä projektin hyödyt ja haitat, kuten mitä etuja siitä saadaan, mitä ongelmia se aiheuttaa ja miten yksityisyys otetaan huomioon.
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannettavaa |
+| -------- | ----------- | -------- | ------------- |
+| Hyötyjen ja haittojen selittäminen | Antoi selkeän selityksen projektin hyödyistä ja haitoista | Antoi lyhyen selityksen projektin hyödyistä ja haitoista | Ei selittänyt projektin hyötyjä tai haittoja |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Pyrimme tarkkuuteen, mutta huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulee pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinkäsityksistä tai virhetulkinnoista.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/1-introduction-to-iot/pi.md b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/pi.md
new file mode 100644
index 00000000..955abf09
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/pi.md
@@ -0,0 +1,286 @@
+
+# Raspberry Pi
+
+[Raspberry Pi](https://raspberrypi.org) on yhden piirilevyn tietokone. Voit lisätä antureita ja toimilaitteita käyttämällä laajaa valikoimaa laitteita ja ekosysteemejä. Näissä oppitunneissa käytetään laitteistoekosysteemiä nimeltä [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html). Koodaat Pi:täsi ja käytät Grove-antureita Pythonin avulla.
+
+
+
+## Asennus
+
+Jos käytät Raspberry Pi:tä IoT-laitteistonasi, sinulla on kaksi vaihtoehtoa - voit käydä läpi kaikki nämä oppitunnit ja koodata suoraan Pi:llä, tai voit yhdistää etänä "päätelaitteettomaan" Pi:hin ja koodata tietokoneeltasi.
+
+Ennen kuin aloitat, sinun täytyy myös liittää Grove Base Hat Pi:hen.
+
+### Tehtävä - asennus
+
+Asenna Grove Base Hat Pi:hen ja konfiguroi Pi.
+
+1. Liitä Grove Base Hat Pi:hen. Hatin liitin sopii kaikkiin Pi:n GPIO-pinneihin, ja se liukuu alas pinnejä pitkin istuen tiukasti pohjalle. Se peittää Pi:n kokonaan.
+
+ 
+
+1. Päätä, miten haluat ohjelmoida Pi:täsi, ja siirry alla olevaan asiaankuuluvaan osioon:
+
+ * [Työskentele suoraan Pi:llä](../../../../../1-getting-started/lessons/1-introduction-to-iot)
+ * [Etäyhteys Pi:n koodaamiseen](../../../../../1-getting-started/lessons/1-introduction-to-iot)
+
+### Työskentele suoraan Pi:llä
+
+Jos haluat työskennellä suoraan Pi:llä, voit käyttää Raspberry Pi OS:n työpöytäversiota ja asentaa kaikki tarvittavat työkalut.
+
+#### Tehtävä - työskentele suoraan Pi:llä
+
+Valmistele Pi kehitystyötä varten.
+
+1. Seuraa ohjeita [Raspberry Pi:n asennusoppaassa](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up) asentaaksesi Pi:n, yhdistääksesi sen näppäimistöön/hiireen/näyttöön, yhdistääksesi sen WiFi- tai ethernet-verkkoon ja päivittääksesi ohjelmiston.
+
+Pi:n ohjelmoimiseksi Grove-antureiden ja toimilaitteiden avulla sinun täytyy asentaa editori, jolla voit kirjoittaa laiteohjelmointikoodia, sekä erilaisia kirjastoja ja työkaluja, jotka toimivat Grove-laitteiston kanssa.
+
+1. Kun Pi on käynnistynyt uudelleen, avaa Terminal napsauttamalla **Terminal**-kuvaketta ylävalikkopalkissa tai valitse *Menu -> Accessories -> Terminal*
+
+1. Suorita seuraava komento varmistaaksesi, että käyttöjärjestelmä ja asennettu ohjelmisto ovat ajan tasalla:
+
+ ```sh
+ sudo apt update && sudo apt full-upgrade --yes
+ ```
+
+1. Suorita seuraavat komennot asentaaksesi kaikki tarvittavat kirjastot Grove-laitteistolle:
+
+ ```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
+ ```
+
+ Tämä aloittaa Gitin ja Pipin asentamisen Python-pakettien asentamista varten.
+
+ Yksi Pythonin tehokkaista ominaisuuksista on kyky asentaa [Pip-paketteja](https://pypi.org) - nämä ovat muiden ihmisten kirjoittamia ja Internetiin julkaistuja koodipaketteja. Voit asentaa Pip-paketin tietokoneellesi yhdellä komennolla ja käyttää sitä koodissasi.
+
+ Seeed Grove Python -paketit täytyy asentaa lähdekoodista. Nämä komennot kloonaavat repo:n, joka sisältää tämän paketin lähdekoodin, ja asentavat sen paikallisesti.
+
+ > 💁 Oletuksena, kun asennat paketin, se on käytettävissä kaikkialla tietokoneellasi, mikä voi aiheuttaa ongelmia pakettiversioiden kanssa - esimerkiksi yksi sovellus voi riippua yhdestä pakettiversiosta, joka rikkoutuu, kun asennat uuden version toista sovellusta varten. Tämän ongelman välttämiseksi voit käyttää [Python-virtuaaliympäristöä](https://docs.python.org/3/library/venv.html), joka on käytännössä Pythonin kopio omassa kansiossaan, ja kun asennat Pip-paketteja, ne asennetaan vain siihen kansioon. Pi:tä käyttäessäsi et kuitenkaan käytä virtuaaliympäristöjä. Grove-asennusskripti asentaa Grove Python -paketit globaalisti, joten jos haluat käyttää virtuaaliympäristöä, sinun täytyy luoda virtuaaliympäristö ja asentaa Grove-paketit manuaalisesti uudelleen siihen ympäristöön. On helpompaa käyttää globaaleja paketteja, erityisesti koska monet Pi-kehittäjät flashaavat puhtaan SD-kortin jokaista projektia varten.
+
+ Lopuksi tämä ottaa käyttöön I2C-liitännän.
+
+1. Käynnistä Pi uudelleen joko valikon kautta tai suorittamalla seuraava komento Terminalissa:
+
+ ```sh
+ sudo reboot
+ ```
+
+1. Kun Pi on käynnistynyt uudelleen, avaa Terminal uudelleen ja suorita seuraava komento asentaaksesi [Visual Studio Code (VS Code)](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) - tämä on editori, jota käytät laiteohjelmointikoodin kirjoittamiseen Pythonilla.
+
+ ```sh
+ sudo apt install code
+ ```
+
+ Kun tämä on asennettu, VS Code on käytettävissä ylävalikosta.
+
+ > 💁 Voit vapaasti käyttää mitä tahansa Python IDE:tä tai editoria näissä oppitunneissa, jos sinulla on suosikkityökalu, mutta oppitunnit antavat ohjeita perustuen VS Codeen.
+
+1. Asenna Pylance. Tämä on VS Code -laajennus, joka tarjoaa Python-kielen tukea. Katso [Pylance-laajennuksen dokumentaatio](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) ohjeita tämän laajennuksen asentamiseen VS Codeen.
+
+### Etäyhteys Pi:n koodaamiseen
+
+Sen sijaan, että koodaisit suoraan Pi:llä, se voi toimia "päätelaitteettomana", eli ei ole kytkettynä näppäimistöön/hiireen/näyttöön, ja voit konfiguroida ja koodata sitä tietokoneeltasi Visual Studio Coden avulla.
+
+#### Asenna Pi OS
+
+Etäkoodausta varten Pi OS täytyy asentaa SD-kortille.
+
+##### Tehtävä - asenna Pi OS
+
+Asenna päätelaitteeton Pi OS.
+
+1. Lataa **Raspberry Pi Imager** [Raspberry Pi OS -ohjelmistosivulta](https://www.raspberrypi.org/software/) ja asenna se
+
+1. Aseta SD-kortti tietokoneeseesi, tarvittaessa adapterin avulla
+
+1. Käynnistä Raspberry Pi Imager
+
+1. Raspberry Pi Imagerissa valitse **CHOOSE OS** -painike ja valitse *Raspberry Pi OS (Other)*, jonka jälkeen *Raspberry Pi OS Lite (32-bit)*
+
+ 
+
+ > 💁 Raspberry Pi OS Lite on Raspberry Pi OS:n versio, jossa ei ole työpöytäkäyttöliittymää tai käyttöliittymäpohjaisia työkaluja. Näitä ei tarvita päätelaitteettomalle Pi:lle, ja tämä tekee asennuksesta pienemmän ja käynnistysajasta nopeamman.
+
+1. Valitse **CHOOSE STORAGE** -painike ja valitse SD-korttisi
+
+1. Käynnistä **Advanced Options** painamalla `Ctrl+Shift+X`. Nämä asetukset mahdollistavat Raspberry Pi OS:n esikonfiguroinnin ennen sen kirjoittamista SD-kortille.
+
+ 1. Valitse **Enable SSH** -valintaruutu ja aseta salasana `pi`-käyttäjälle. Tämä on salasana, jota käytät kirjautuaksesi Pi:lle myöhemmin.
+
+ 1. Jos aiot yhdistää Pi:n WiFi:n kautta, valitse **Configure WiFi** -valintaruutu ja syötä WiFi SSID ja salasana sekä valitse WiFi-maa. Tätä ei tarvitse tehdä, jos käytät ethernet-kaapelia. Varmista, että verkko, johon yhdistät, on sama kuin tietokoneesi.
+
+ 1. Valitse **Set locale settings** -valintaruutu ja aseta maa ja aikavyöhyke
+
+ 1. Valitse **SAVE**-painike
+
+1. Valitse **WRITE**-painike kirjoittaaksesi käyttöjärjestelmän SD-kortille. Jos käytät macOS:ia, sinua pyydetään syöttämään salasanasi, koska taustalla oleva työkalu, joka kirjoittaa levykuvia, tarvitsee oikeudet.
+
+Käyttöjärjestelmä kirjoitetaan SD-kortille, ja kun se on valmis, kortti poistetaan käyttöjärjestelmän toimesta, ja sinulle ilmoitetaan. Poista SD-kortti tietokoneestasi, aseta se Pi:hen, käynnistä Pi ja odota noin 2 minuuttia, että se käynnistyy kunnolla.
+
+#### Yhdistä Pi:hin
+
+Seuraava vaihe on Pi:n etäkäyttö. Voit tehdä tämän käyttämällä `ssh`:ta, joka on saatavilla macOS:issa, Linuxissa ja Windowsin uusimmissa versioissa.
+
+##### Tehtävä - yhdistä Pi:hin
+
+Yhdistä Pi:hin etänä.
+
+1. Käynnistä Terminal tai Command Prompt ja syötä seuraava komento yhdistääksesi Pi:hin:
+
+ ```sh
+ ssh pi@raspberrypi.local
+ ```
+
+ Jos käytät Windowsia vanhemmalla versiolla, jossa ei ole `ssh`:ta asennettuna, voit käyttää OpenSSH:ta. Löydät asennusohjeet [OpenSSH:n asennusdokumentaatiosta](https://docs.microsoft.com//windows-server/administration/openssh/openssh_install_firstuse?WT.mc_id=academic-17441-jabenn).
+
+1. Tämä yhdistää Pi:hin ja pyytää salasanaa.
+
+ Kyky löytää tietokoneita verkostasi käyttämällä `.local` on melko uusi lisäys Linuxiin ja Windowsiin. Jos käytät Linuxia tai Windowsia ja saat virheitä, joissa Hostnamea ei löydy, sinun täytyy asentaa lisäohjelmisto ZeroConf-verkkoyhteyden mahdollistamiseksi (Apple kutsuu tätä Bonjouriksi):
+
+ 1. Jos käytät Linuxia, asenna Avahi seuraavalla komennolla:
+
+ ```sh
+ sudo apt-get install avahi-daemon
+ ```
+
+ 1. Jos käytät Windowsia, helpoin tapa ottaa ZeroConf käyttöön on asentaa [Bonjour Print Services for Windows](http://support.apple.com/kb/DL999). Voit myös asentaa [iTunes for Windows](https://www.apple.com/itunes/download/) saadaksesi uudemman version apuohjelmasta (joka ei ole saatavilla erillisenä).
+
+ > 💁 Jos et voi yhdistää käyttämällä `raspberrypi.local`, voit käyttää Pi:n IP-osoitetta. Katso [Raspberry Pi IP-osoite dokumentaatio](https://www.raspberrypi.org/documentation/remote-access/ip-address.md) ohjeita useista tavoista saada IP-osoite.
+
+1. Syötä salasana, jonka asetit Raspberry Pi Imager Advanced Options -asetuksissa.
+
+#### Konfiguroi ohjelmisto Pi:llä
+
+Kun olet yhdistänyt Pi:hin, sinun täytyy varmistaa, että käyttöjärjestelmä on ajan tasalla, ja asentaa erilaisia kirjastoja ja työkaluja, jotka toimivat Grove-laitteiston kanssa.
+
+##### Tehtävä - konfiguroi ohjelmisto Pi:llä
+
+Konfiguroi asennettu Pi-ohjelmisto ja asenna Grove-kirjastot.
+
+1. `ssh`-istunnostasi suorita seuraava komento päivittääksesi ja käynnistääksesi Pi uudelleen:
+
+ ```sh
+ sudo apt update && sudo apt full-upgrade --yes && sudo reboot
+ ```
+
+ Pi päivitetään ja käynnistetään uudelleen. `ssh`-istunto päättyy, kun Pi käynnistetään uudelleen, joten odota noin 30 sekuntia ja yhdistä uudelleen.
+
+1. Uudelleen yhdistetystä `ssh`-istunnosta suorita seuraavat komennot asentaaksesi kaikki tarvittavat kirjastot Grove-laitteistolle:
+
+ ```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
+ ```
+
+ Tämä aloittaa Gitin ja Pipin asentamisen Python-pakettien asentamista varten.
+
+ Yksi Pythonin tehokkaista ominaisuuksista on kyky asentaa [Pip-paketteja](https://pypi.org) - nämä ovat muiden ihmisten kirjoittamia ja Internetiin julkaistuja koodipaketteja. Voit asentaa Pip-paketin tietokoneellesi yhdellä komennolla ja käyttää sitä koodissasi.
+
+ Seeed Grove Python -paketit täytyy asentaa lähdekoodista. Nämä komennot kloonaavat repo:n, joka sisältää tämän paketin lähdekoodin, ja asentavat sen paikallisesti.
+
+ > 💁 Oletuksena, kun asennat paketin, se on käytettävissä kaikkialla tietokoneellasi, mikä voi aiheuttaa ongelmia pakettiversioiden kanssa - esimerkiksi yksi sovellus voi riippua yhdestä pakettiversiosta, joka rikkoutuu, kun asennat uuden version toista sovellusta varten. Tämän ongelman välttämiseksi voit käyttää [Python-virtuaaliympäristöä](https://docs.python.org/3/library/venv.html), joka on käytännössä Pythonin kopio omassa kansiossaan, ja kun asennat Pip-paketteja, ne asennetaan vain siihen kansioon. Pi:tä käyttäessäsi et kuitenkaan käytä virtuaaliympäristöjä. Grove-asennusskripti asentaa Grove Python -paketit globaalisti, joten jos haluat käyttää virtuaaliympäristöä, sinun täytyy luoda virtuaaliympäristö ja asentaa Grove-paketit manuaalisesti uudelleen siihen ympäristöön. On helpompaa käyttää globaaleja paketteja, erityisesti koska monet Pi-kehittäjät flashaavat puhtaan SD-kortin jokaista projektia varten.
+
+ Lopuksi tämä ottaa käyttöön I2C-liitännän.
+
+1. Käynnistä Pi uudelleen suorittamalla seuraava komento:
+
+ ```sh
+ sudo reboot
+ ```
+
+ `ssh`-istunto päättyy, kun Pi käynnistetään uudelleen. Uudelleen yhdistäminen ei ole tarpeen.
+
+#### Konfiguroi VS Code etäkäyttöä varten
+
+Kun Pi on konfiguroitu, voit yhdistää siihen Visual Studio Coden (VS Code) avulla tietokoneeltasi - tämä on ilmainen kehittäjien tekstieditori, jota käytät laiteohjelmointikoodin kirjoittamiseen Pythonilla.
+
+##### Tehtävä - konfiguroi VS Code etäkäyttöä varten
+
+Asenna tarvittava ohjelmisto ja yhdistä etänä Pi:hin.
+
+1. Asenna VS Code tietokoneellesi seuraamalla [VS Code -dokumentaatiota](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn)
+
+1. Seuraa ohjeita [VS Code Remote Development using SSH -dokumentaatiossa](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn) asentaaksesi tarvittavat komponentit
+
+1. Seuraa samoja ohjeita yhdistääksesi VS Code Pi:hin
+
+1. Kun olet yhdistänyt, seuraa [laajennusten hallinta](https://code.visualstudio.com/docs/remote/ssh#_managing-extensions?WT.mc_id=academic-17441-jabenn) -ohjeita asentaaksesi [Pylance-laajennuksen](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) etänä Pi:lle
+
+## Hello world
+On perinteistä, että uuden ohjelmointikielen tai teknologian parissa aloitetaan luomalla 'Hello World' -sovellus – pieni sovellus, joka tulostaa esimerkiksi tekstin `"Hello World"` osoittaakseen, että kaikki työkalut on asennettu oikein.
+
+Pi:n Hello World -sovellus varmistaa, että Python ja Visual Studio Code on asennettu oikein.
+
+Tämä sovellus sijaitsee kansiossa nimeltä `nightlight`, ja sitä käytetään myöhemmin eri koodilla osana tätä tehtävää yövalosovelluksen rakentamiseksi.
+
+### Tehtävä - hello world
+
+Luo Hello World -sovellus.
+
+1. Käynnistä VS Code joko suoraan Pi:llä tai tietokoneellasi ja yhdistä Pi:hin Remote SSH -laajennuksen avulla.
+
+1. Avaa VS Code -pääte valitsemalla *Terminal -> New Terminal* tai painamalla `` CTRL+` ``. Pääte avautuu `pi`-käyttäjän kotihakemistoon.
+
+1. Suorita seuraavat komennot luodaksesi hakemiston koodillesi ja Python-tiedoston nimeltä `app.py` kyseiseen hakemistoon:
+
+ ```sh
+ mkdir nightlight
+ cd nightlight
+ touch app.py
+ ```
+
+1. Avaa tämä kansio VS Codessa valitsemalla *File -> Open...* ja valitsemalla *nightlight*-kansio, sitten valitse **OK**.
+
+ 
+
+1. Avaa `app.py`-tiedosto VS Code -tiedostoselaimesta ja lisää seuraava koodi:
+
+ ```python
+ print('Hello World!')
+ ```
+
+ `print`-funktio tulostaa konsoliin sen, mitä sille annetaan.
+
+1. Suorita Python-sovelluksesi VS Code -päätteestä seuraavalla komennolla:
+
+ ```sh
+ python app.py
+ ```
+
+ > 💁 Saatat joutua kutsumaan nimenomaisesti `python3` suorittaaksesi tämän koodin, jos sinulla on asennettuna Python 2 Python 3:n lisäksi (uusin versio). Jos sinulla on Python 2 asennettuna, `python` käyttää Python 2:ta Python 3:n sijaan. Oletuksena uusimmissa Raspberry Pi OS -versioissa on vain Python 3 asennettuna.
+
+ Seuraava tulostus ilmestyy päätteeseen:
+
+ ```output
+ pi@raspberrypi:~/nightlight $ python3 app.py
+ Hello World!
+ ```
+
+> 💁 Löydät tämän koodin [code/pi](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/pi) -kansiosta.
+
+😀 'Hello World' -ohjelmasi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md
new file mode 100644
index 00000000..30eb2e76
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md
@@ -0,0 +1,245 @@
+
+# Virtuaalinen yhden piirilevyn tietokone
+
+Sen sijaan, että ostaisit IoT-laitteen, sensoreita ja toimilaitteita, voit käyttää tietokonettasi simuloimaan IoT-laitteistoa. [CounterFit-projekti](https://github.com/CounterFit-IoT/CounterFit) mahdollistaa sovelluksen ajamisen paikallisesti, joka simuloi IoT-laitteistoa, kuten sensoreita ja toimilaitteita, ja pääsyn näihin sensoreihin ja toimilaitteisiin paikallisesta Python-koodista, joka on kirjoitettu samalla tavalla kuin fyysisellä laitteistolla, kuten Raspberry Pi:llä.
+
+## Asennus
+
+CounterFitin käyttöä varten sinun tulee asentaa tietokoneellesi ilmaisia ohjelmistoja.
+
+### Tehtävä
+
+Asenna tarvittavat ohjelmistot.
+
+1. Asenna Python. Katso [Pythonin lataussivu](https://www.python.org/downloads/) saadaksesi ohjeet Pythonin uusimman version asentamiseen.
+
+1. Asenna Visual Studio Code (VS Code). Tämä on editori, jota käytät virtuaalisen laitteen koodin kirjoittamiseen Pythonilla. Katso [VS Code -dokumentaatio](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) saadaksesi ohjeet VS Coden asentamiseen.
+
+ > 💁 Voit käyttää mitä tahansa Python IDE:tä tai editoria näissä oppitunneissa, jos sinulla on mieluisampi työkalu, mutta oppitunnit antavat ohjeita perustuen VS Coden käyttöön.
+
+1. Asenna VS Code Pylance -laajennus. Tämä on VS Code -laajennus, joka tarjoaa Python-kielen tukea. Katso [Pylance-laajennuksen dokumentaatio](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) saadaksesi ohjeet tämän laajennuksen asentamiseen VS Codeen.
+
+Ohjeet CounterFit-sovelluksen asentamiseen ja konfigurointiin annetaan tehtävän ohjeissa, sillä se asennetaan projektikohtaisesti.
+
+## Hello world
+
+On perinteistä aloittaa uuden ohjelmointikielen tai teknologian käyttö luomalla 'Hello World' -sovellus - pieni sovellus, joka tulostaa esimerkiksi tekstin `"Hello World"` osoittaakseen, että kaikki työkalut on konfiguroitu oikein.
+
+Virtuaalisen IoT-laitteiston Hello World -sovellus varmistaa, että Python ja Visual Studio Code on asennettu oikein. Se myös yhdistää CounterFitiin virtuaalisia IoT-sensoreita ja toimilaitteita varten. Sovellus ei käytä mitään laitteistoa, vaan yhdistää vain varmistaakseen, että kaikki toimii.
+
+Tämä sovellus sijaitsee kansiossa nimeltä `nightlight`, ja sitä käytetään uudelleen eri koodilla myöhemmissä osissa tätä tehtävää yövalosovelluksen rakentamiseksi.
+
+### Konfiguroi Python-virtuaaliympäristö
+
+Yksi Pythonin tehokkaista ominaisuuksista on mahdollisuus asentaa [Pip-paketteja](https://pypi.org) - nämä ovat muiden ihmisten kirjoittamia ja Internetiin julkaistuja koodipaketteja. Voit asentaa Pip-paketin tietokoneellesi yhdellä komennolla ja käyttää sitä koodissasi. Käytät Pip:iä CounterFitin kanssa keskustelemiseen.
+
+Oletuksena, kun asennat paketin, se on käytettävissä kaikkialla tietokoneellasi, mikä voi johtaa ongelmiin pakettiversioiden kanssa - esimerkiksi yksi sovellus voi riippua yhdestä pakettiversiosta, joka rikkoutuu, kun asennat uuden version toista sovellusta varten. Tämän ongelman kiertämiseksi voit käyttää [Python-virtuaaliympäristöä](https://docs.python.org/3/library/venv.html), joka on käytännössä Pythonin kopio omassa kansiossaan, ja kun asennat Pip-paketteja, ne asennetaan vain siihen kansioon.
+
+> 💁 Jos käytät Raspberry Pi:tä, et konfiguroinut virtuaaliympäristöä hallitaksesi Pip-paketteja, vaan käytät globaaleja paketteja, koska Grove-paketit asennetaan globaalisti asennusskriptin avulla.
+
+#### Tehtävä - konfiguroi Python-virtuaaliympäristö
+
+Konfiguroi Python-virtuaaliympäristö ja asenna CounterFitin Pip-paketit.
+
+1. Aja seuraavat komennot terminaalissa tai komentorivillä haluamassasi sijainnissa luodaksesi ja siirtyäksesi uuteen hakemistoon:
+
+ ```sh
+ mkdir nightlight
+ cd nightlight
+ ```
+
+1. Aja seuraava komento luodaksesi virtuaaliympäristön `.venv`-kansioon:
+
+ ```sh
+ python3 -m venv .venv
+ ```
+
+ > 💁 Sinun täytyy kutsua `python3` eksplisiittisesti luodaksesi virtuaaliympäristön, koska sinulla saattaa olla Python 2 asennettuna Python 3:n lisäksi (uusin versio). Jos sinulla on Python 2 asennettuna, `python` käyttää Python 2:ta Python 3:n sijaan.
+
+1. Aktivoi virtuaaliympäristö:
+
+ * Windowsissa:
+ * Jos käytät Command Promptia tai Command Promptia Windows Terminalin kautta, aja:
+
+ ```cmd
+ .venv\Scripts\activate.bat
+ ```
+
+ * Jos käytät PowerShelliä, aja:
+
+ ```powershell
+ .\.venv\Scripts\Activate.ps1
+ ```
+
+ > Jos saat virheilmoituksen, että skriptien suorittaminen on estetty tällä järjestelmällä, sinun täytyy sallia skriptien suorittaminen asettamalla sopiva suorituskäytäntö. Voit tehdä tämän käynnistämällä PowerShellin järjestelmänvalvojana ja ajamalla seuraavan komennon:
+
+ ```powershell
+ Set-ExecutionPolicy -ExecutionPolicy Unrestricted
+ ```
+
+ Vahvista painamalla `Y`. Käynnistä sitten PowerShell uudelleen ja yritä uudelleen.
+
+ Voit tarvittaessa palauttaa tämän suorituskäytännön myöhemmin. Voit lukea lisää tästä [Microsoft Docsin Execution Policies -sivulta](https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies?WT.mc_id=academic-17441-jabenn).
+
+ * macOS:ssä tai Linuxissa, aja:
+
+ ```cmd
+ source ./.venv/bin/activate
+ ```
+
+ > 💁 Nämä komennot tulee ajaa samasta sijainnista, jossa ajoit komennon virtuaaliympäristön luomiseksi. Sinun ei koskaan tarvitse siirtyä `.venv`-kansioon, vaan sinun tulee aina ajaa aktivointikomento ja kaikki komennot pakettien asentamiseksi tai koodin suorittamiseksi kansiosta, jossa olit virtuaaliympäristön luomisen aikana.
+
+1. Kun virtuaaliympäristö on aktivoitu, oletus `python`-komento ajaa Python-version, jota käytettiin virtuaaliympäristön luomiseen. Aja seuraava komento saadaksesi version:
+
+ ```sh
+ python --version
+ ```
+
+ Tulosteen tulisi sisältää seuraava:
+
+ ```output
+ (.venv) ➜ nightlight python --version
+ Python 3.9.1
+ ```
+
+ > 💁 Python-versiosi saattaa olla erilainen - kunhan se on versio 3.6 tai uudempi, olet hyvässä tilanteessa. Jos ei, poista tämä kansio, asenna uudempi Python-versio ja yritä uudelleen.
+
+1. Aja seuraavat komennot asentaaksesi CounterFitin Pip-paketit. Nämä paketit sisältävät CounterFit-sovelluksen sekä Grove-laitteiston shimit. Nämä shimit mahdollistavat koodin kirjoittamisen ikään kuin ohjelmoisit fyysisiä sensoreita ja toimilaitteita Grove-ekosysteemistä, mutta yhdistettynä virtuaalisiin IoT-laitteisiin.
+
+ ```sh
+ pip install CounterFit
+ pip install counterfit-connection
+ pip install counterfit-shims-grove
+ ```
+
+ Nämä Pip-paketit asennetaan vain virtuaaliympäristöön, eivätkä ne ole käytettävissä sen ulkopuolella.
+
+### Kirjoita koodi
+
+Kun Python-virtuaaliympäristö on valmis, voit kirjoittaa 'Hello World' -sovelluksen koodin.
+
+#### Tehtävä - kirjoita koodi
+
+Luo Python-sovellus, joka tulostaa `"Hello World"` konsoliin.
+
+1. Aja seuraava komento terminaalissa tai komentorivillä virtuaaliympäristön sisällä luodaksesi Python-tiedoston nimeltä `app.py`:
+
+ * Windowsissa aja:
+
+ ```cmd
+ type nul > app.py
+ ```
+
+ * macOS:ssä tai Linuxissa aja:
+
+ ```cmd
+ touch app.py
+ ```
+
+1. Avaa nykyinen kansio VS Codessa:
+
+ ```sh
+ code .
+ ```
+
+ > 💁 Jos terminaalisi palauttaa `command not found` macOS:ssä, se tarkoittaa, että VS Codea ei ole lisätty PATH:iin. Voit lisätä VS Coden PATH:iin seuraamalla ohjeita [VS Code -dokumentaation Komentoriviltä käynnistäminen -osiossa](https://code.visualstudio.com/docs/setup/mac?WT.mc_id=academic-17441-jabenn#_launching-from-the-command-line) ja ajaa komennon sen jälkeen. VS Code lisätään oletuksena PATH:iin Windowsissa ja Linuxissa.
+
+1. Kun VS Code käynnistyy, se aktivoi Python-virtuaaliympäristön. Valittu virtuaaliympäristö näkyy alareunan tilapalkissa:
+
+ 
+
+1. Jos VS Coden terminaali on jo käynnissä, kun VS Code käynnistyy, virtuaaliympäristö ei ole aktivoitu siinä. Helpoin tapa on sulkea terminaali käyttämällä **Sulje aktiivinen terminaali** -painiketta:
+
+ 
+
+ Voit tarkistaa, onko terminaalissa aktivoitu virtuaaliympäristö, sillä virtuaaliympäristön nimi näkyy terminaalin kehotteen etuliitteenä. Esimerkiksi se voi olla:
+
+ ```sh
+ (.venv) ➜ nightlight
+ ```
+
+ Jos kehotteessa ei ole `.venv`-etuliitettä, virtuaaliympäristö ei ole aktiivinen terminaalissa.
+
+1. Käynnistä uusi VS Code -terminaali valitsemalla *Terminal -> New Terminal* tai painamalla `` CTRL+` ``. Uusi terminaali lataa virtuaaliympäristön, ja aktivointikutsu näkyy terminaalissa. Kehotteessa näkyy myös virtuaaliympäristön nimi (`.venv`):
+
+ ```output
+ ➜ nightlight source .venv/bin/activate
+ (.venv) ➜ nightlight
+ ```
+
+1. Avaa `app.py`-tiedosto VS Coden tiedostoselaimesta ja lisää seuraava koodi:
+
+ ```python
+ print('Hello World!')
+ ```
+
+ `print`-funktio tulostaa sille annetun sisällön konsoliin.
+
+1. Aja seuraava komento VS Coden terminaalista suorittaaksesi Python-sovelluksesi:
+
+ ```sh
+ python app.py
+ ```
+
+ Tulosteessa näkyy seuraava:
+
+ ```output
+ (.venv) ➜ nightlight python app.py
+ Hello World!
+ ```
+
+😀 'Hello World' -ohjelmasi onnistui!
+
+### Yhdistä 'laitteisto'
+
+Toisena 'Hello World' -vaiheena käynnistät CounterFit-sovelluksen ja yhdistät koodisi siihen. Tämä vastaa virtuaalisesti IoT-laitteiston liittämistä kehityskorttiin.
+
+#### Tehtävä - yhdistä 'laitteisto'
+
+1. Käynnistä CounterFit-sovellus VS Coden terminaalista seuraavalla komennolla:
+
+ ```sh
+ counterfit
+ ```
+
+ Sovellus käynnistyy ja avautuu verkkoselaimessasi:
+
+ 
+
+ Sovellus on merkitty *Disconnected*-tilaan, ja oikean yläkulman LED on sammutettu.
+
+1. Lisää seuraava koodi `app.py`-tiedoston alkuun:
+
+ ```python
+ from counterfit_connection import CounterFitConnection
+ CounterFitConnection.init('127.0.0.1', 5000)
+ ```
+
+ Tämä koodi tuo `CounterFitConnection`-luokan `counterfit_connection`-moduulista, joka tulee aiemmin asennetusta `counterfit-connection` Pip-paketista. Se alustaa yhteyden CounterFit-sovellukseen, joka toimii osoitteessa `127.0.0.1`, IP-osoite, jota voit aina käyttää paikallisen tietokoneesi (usein kutsutaan *localhost*) tavoittamiseen, portissa 5000.
+
+ > 💁 Jos sinulla on muita sovelluksia käynnissä portissa 5000, voit muuttaa tätä päivittämällä portin koodissa ja käynnistämällä CounterFitin komennolla `CounterFit --port `, korvaten `` haluamallasi portilla.
+
+1. Sinun täytyy käynnistää uusi VS Code -terminaali valitsemalla **Luo uusi integroitu terminaali** -painike. Tämä johtuu siitä, että CounterFit-sovellus on käynnissä nykyisessä terminaalissa.
+
+ 
+
+1. Aja `app.py`-tiedosto uudessa terminaalissa kuten aiemmin. CounterFitin tila muuttuu **Connected**-tilaan ja LED syttyy.
+
+ 
+
+> 💁 Löydät tämän koodin [code/virtual-device](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/virtual-device) -kansiosta.
+
+😀 Yhteys laitteistoon onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md
new file mode 100644
index 00000000..8ee8db7d
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md
@@ -0,0 +1,222 @@
+
+# Wio Terminal
+
+[Wio Terminal Seeed Studiosilta](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) on Arduino-yhteensopiva mikrokontrolleri, jossa on WiFi sekä sisäänrakennettuja sensoreita ja toimilaitteita. Lisäksi siinä on liitäntöjä, joiden avulla voit lisätä enemmän sensoreita ja toimilaitteita käyttäen laitteistoekosysteemiä nimeltä [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html).
+
+
+
+## Asennus
+
+Jotta voit käyttää Wio Terminalia, sinun täytyy asentaa tietokoneellesi ilmainen ohjelmisto. Lisäksi sinun täytyy päivittää Wio Terminalin laiteohjelmisto ennen kuin voit yhdistää sen WiFi-verkkoon.
+
+### Tehtävä - asennus
+
+Asenna tarvittava ohjelmisto ja päivitä laiteohjelmisto.
+
+1. Asenna Visual Studio Code (VS Code). Tämä on editori, jota käytät kirjoittaaksesi laitteen koodia C/C++-kielellä. Katso [VS Code -dokumentaatio](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) saadaksesi ohjeet VS Coden asentamiseen.
+
+ > 💁 Toinen suosittu IDE Arduino-kehitykseen on [Arduino IDE](https://www.arduino.cc/en/software). Jos olet jo tuttu tämän työkalun kanssa, voit käyttää sitä VS Coden ja PlatformIO:n sijaan, mutta oppitunneilla annetaan ohjeet käyttäen VS Codea.
+
+1. Asenna VS Coden PlatformIO-laajennus. Tämä on VS Codeen tarkoitettu laajennus, joka tukee mikrokontrollerien ohjelmointia C/C++-kielellä. Katso [PlatformIO-laajennuksen dokumentaatio](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=platformio.platformio-ide) saadaksesi ohjeet tämän laajennuksen asentamiseen VS Codeen. Tämä laajennus vaatii Microsoftin C/C++-laajennuksen toimiakseen C- ja C++-koodin kanssa, ja C/C++-laajennus asennetaan automaattisesti, kun asennat PlatformIO:n.
+
+1. Yhdistä Wio Terminal tietokoneeseesi. Wio Terminalissa on USB-C-portti pohjassa, ja tämä täytyy yhdistää tietokoneesi USB-porttiin. Wio Terminalin mukana tulee USB-C–USB-A-kaapeli, mutta jos tietokoneessasi on vain USB-C-portteja, tarvitset joko USB-C-kaapelin tai USB-A–USB-C-sovittimen.
+
+1. Seuraa [Wio Terminal Wiki WiFi Overview -dokumentaation](https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/) ohjeita asentaaksesi Wio Terminalin ja päivittääksesi laiteohjelmiston.
+
+## Hello World
+
+On perinteistä aloittaa uuden ohjelmointikielen tai teknologian käyttö luomalla 'Hello World' -sovellus – pieni sovellus, joka tulostaa esimerkiksi tekstin `"Hello World"` osoittaakseen, että kaikki työkalut on asennettu oikein.
+
+Wio Terminalin Hello World -sovellus varmistaa, että Visual Studio Code on asennettu oikein PlatformIO:n kanssa ja että se on valmis mikrokontrollerikehitykseen.
+
+### Luo PlatformIO-projekti
+
+Ensimmäinen askel on luoda uusi projekti PlatformIO:ssa, joka on konfiguroitu Wio Terminalille.
+
+#### Tehtävä - luo PlatformIO-projekti
+
+Luo PlatformIO-projekti.
+
+1. Yhdistä Wio Terminal tietokoneeseesi.
+
+1. Käynnistä VS Code.
+
+1. PlatformIO-kuvake löytyy sivupalkista:
+
+ 
+
+ Valitse tämä valikkovaihtoehto ja valitse *PIO Home -> Open*.
+
+ 
+
+1. Tervetulonäytöstä valitse **+ New Project** -painike.
+
+ 
+
+1. Konfiguroi projekti *Project Wizardissa*:
+
+ 1. Nimeä projektisi `nightlight`.
+
+ 1. *Board*-pudotusvalikosta kirjoita `WIO` suodattaaksesi lautoja ja valitse *Seeeduino Wio Terminal*.
+
+ 1. Jätä *Framework* kohdaksi *Arduino*.
+
+ 1. Jätä *Use default location* -valintaruutu valituksi tai poista valinta ja valitse sijainti projektillesi.
+
+ 1. Valitse **Finish**-painike.
+
+ 
+
+ PlatformIO lataa tarvittavat komponentit koodin kääntämiseksi Wio Terminalille ja luo projektisi. Tämä voi kestää muutaman minuutin.
+
+### Tutki PlatformIO-projektia
+
+VS Coden resurssienhallinta näyttää joukon tiedostoja ja kansioita, jotka PlatformIO:n ohjattu toiminto on luonut.
+
+#### Kansiot
+
+* `.pio` - tämä kansio sisältää väliaikaista dataa, jota PlatformIO tarvitsee, kuten kirjastoja tai käännettyä koodia. Se luodaan automaattisesti uudelleen, jos se poistetaan, eikä sitä tarvitse lisätä versionhallintaan, jos jaat projektisi esimerkiksi GitHubissa.
+* `.vscode` - tämä kansio sisältää PlatformIO:n ja VS Coden käyttämän konfiguraation. Se luodaan automaattisesti uudelleen, jos se poistetaan, eikä sitä tarvitse lisätä versionhallintaan, jos jaat projektisi esimerkiksi GitHubissa.
+* `include` - tämä kansio on ulkoisille otsikkotiedostoille, joita tarvitaan lisäkirjastojen lisäämiseen koodiin. Et käytä tätä kansiota näissä oppitunneissa.
+* `lib` - tämä kansio on ulkoisille kirjastoille, joita haluat kutsua koodistasi. Et käytä tätä kansiota näissä oppitunneissa.
+* `src` - tämä kansio sisältää sovelluksesi pääkoodin. Aluksi siinä on yksi tiedosto - `main.cpp`.
+* `test` - tämä kansio on tarkoitettu yksikkötesteille koodillesi.
+
+#### Tiedostot
+
+* `main.cpp` - tämä tiedosto `src`-kansiossa sisältää sovelluksesi aloituspisteen. Avaa tämä tiedosto, ja siinä on seuraava koodi:
+
+ ```cpp
+ #include
+
+ void setup() {
+ // put your setup code here, to run once:
+ }
+
+ void loop() {
+ // put your main code here, to run repeatedly:
+ }
+ ```
+
+ Kun laite käynnistyy, Arduino-kehys suorittaa `setup`-funktion kerran ja sen jälkeen `loop`-funktion toistuvasti, kunnes laite sammutetaan.
+
+* `.gitignore` - tämä tiedosto listaa tiedostot ja kansiot, jotka tulee jättää huomiotta, kun lisäät koodisi git-versionhallintaan, kuten ladatessasi sen GitHub-repositorioon.
+
+* `platformio.ini` - tämä tiedosto sisältää konfiguraation laitteellesi ja sovelluksellesi. Avaa tämä tiedosto, ja siinä on seuraava koodi:
+
+ ```ini
+ [env:seeed_wio_terminal]
+ platform = atmelsam
+ board = seeed_wio_terminal
+ framework = arduino
+ ```
+
+ `[env:seeed_wio_terminal]`-osio sisältää konfiguraation Wio Terminalille. Voit lisätä useita `env`-osioita, jotta koodisi voidaan kääntää useille laudoille.
+
+ Muut arvot vastaavat projektin ohjatun toiminnon konfiguraatiota:
+
+ * `platform = atmelsam` määrittää laitteiston, jota Wio Terminal käyttää (ATSAMD51-pohjainen mikrokontrolleri).
+ * `board = seeed_wio_terminal` määrittää mikrokontrollerilaudan tyypin (Wio Terminal).
+ * `framework = arduino` määrittää, että tämä projekti käyttää Arduino-kehystä.
+
+### Kirjoita Hello World -sovellus
+
+Olet nyt valmis kirjoittamaan Hello World -sovelluksen.
+
+#### Tehtävä - kirjoita Hello World -sovellus
+
+Kirjoita Hello World -sovellus.
+
+1. Avaa `main.cpp`-tiedosto VS Codessa.
+
+1. Muuta koodi vastaamaan seuraavaa:
+
+ ```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`-funktio alustaa yhteyden sarjaporttiin – tässä tapauksessa USB-porttiin, jota käytetään Wio Terminalin yhdistämiseen tietokoneeseen. Parametri `9600` on [baudinopeus](https://wikipedia.org/wiki/Symbol_rate) (tunnetaan myös nimellä symbolinopeus), eli nopeus, jolla dataa lähetetään sarjaportin kautta bitteinä sekunnissa. Tämä asetus tarkoittaa, että 9 600 bittiä (0:ia ja 1:siä) dataa lähetetään sekunnissa. Se odottaa sitten, että sarjaportti on valmis.
+
+ `loop`-funktio lähettää rivin `Hello World!` sarjaporttiin, eli `Hello World!`-merkit ja uuden rivin merkin. Se sitten nukkuu 5 000 millisekuntia eli 5 sekuntia. Kun `loop` päättyy, se suoritetaan uudelleen, ja uudelleen, ja niin edelleen niin kauan kuin mikrokontrolleri on päällä.
+
+1. Aseta Wio Terminal lataustilaan. Sinun täytyy tehdä tämä joka kerta, kun lataat uutta koodia laitteeseen:
+
+ 1. Vedä virtakytkintä alas nopeasti kahdesti – se palautuu takaisin päälle-asentoon joka kerta.
+
+ 1. Tarkista sininen tilavalo USB-portin oikealla puolella. Sen pitäisi sykkiä.
+
+ [](https://youtu.be/LeKU_7zLRrQ)
+
+ Klikkaa yllä olevaa kuvaa nähdäksesi videon, joka näyttää, miten tämä tehdään.
+
+1. Rakenna ja lataa koodi Wio Terminalille.
+
+ 1. Avaa VS Coden komentopaletti.
+
+ 1. Kirjoita `PlatformIO Upload` etsiäksesi latausvaihtoehdon ja valitse *PlatformIO: Upload*.
+
+ 
+
+ PlatformIO kääntää koodin automaattisesti tarvittaessa ennen lataamista.
+
+ 1. Koodi käännetään ja ladataan Wio Terminalille.
+
+ > 💁 Jos käytät macOS:ia, ilmoitus *DISK NOT EJECTED PROPERLY* ilmestyy. Tämä johtuu siitä, että Wio Terminal liitetään asemaksi osana ohjelmointiprosessia, ja se irrotetaan, kun käännetty koodi kirjoitetaan laitteeseen. Voit ohittaa tämän ilmoituksen.
+
+ ⚠️ Jos saat virheitä, joissa latausportti ei ole käytettävissä, varmista ensin, että Wio Terminal on yhdistetty tietokoneeseesi ja kytketty päälle näytön vasemmalla puolella olevalla kytkimellä, ja asetettu lataustilaan. Vihreän valon pohjassa pitäisi olla päällä, ja sinisen valon pitäisi sykkiä. Jos virhe jatkuu, vedä virtakytkintä alas nopeasti kahdesti uudelleen pakottaaksesi Wio Terminal lataustilaan ja yritä latausta uudelleen.
+
+PlatformIO:ssa on sarjaportin monitori, joka voi seurata USB-kaapelin kautta lähetettyä dataa Wio Terminalilta. Tämä mahdollistaa datan seuraamisen, jonka `Serial.println("Hello World");`-komento lähettää.
+
+1. Avaa VS Coden komentopaletti.
+
+1. Kirjoita `PlatformIO Serial` etsiäksesi sarjaportin monitorivaihtoehdon ja valitse *PlatformIO: Serial Monitor*.
+
+ 
+
+ Uusi terminaali avautuu, ja sarjaportin kautta lähetetty data striimataan tähän terminaaliin:
+
+ ```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` tulostuu sarjaportin monitoriin joka 5. sekunti.
+
+> 💁 Löydät tämän koodin [code/wio-terminal](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/wio-terminal)-kansiosta.
+
+😀 'Hello World' -ohjelmasi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/2-deeper-dive/README.md b/translations/fi/1-getting-started/lessons/2-deeper-dive/README.md
new file mode 100644
index 00000000..a2281337
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/2-deeper-dive/README.md
@@ -0,0 +1,277 @@
+
+# Syvällisempi katsaus IoT:hen
+
+
+
+> Sketchnote: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+Tämä oppitunti oli osa [Hello IoT -sarjaa](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) [Microsoft Reactorilta](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Oppitunti koostui kahdesta videosta: tunnin mittaisesta oppitunnista ja tunnin mittaisesta toimistotunnista, jossa syvennyttiin oppitunnin osiin ja vastattiin kysymyksiin.
+
+[](https://youtu.be/t0SySWw3z9M)
+
+[](https://youtu.be/tTZYf9EST1E)
+
+> 🎥 Klikkaa yllä olevia kuvia katsoaksesi videot
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/3)
+
+## Johdanto
+
+Tässä oppitunnissa syvennytään joihinkin edellisen oppitunnin käsitteisiin.
+
+Tässä oppitunnissa käsitellään:
+
+* [IoT-sovelluksen komponentit](../../../../../1-getting-started/lessons/2-deeper-dive)
+* [Syvällisempi katsaus mikrokontrollereihin](../../../../../1-getting-started/lessons/2-deeper-dive)
+* [Syvällisempi katsaus yksikorttitietokoneisiin](../../../../../1-getting-started/lessons/2-deeper-dive)
+
+## IoT-sovelluksen komponentit
+
+IoT-sovelluksen kaksi pääkomponenttia ovat *Internet* ja *laite*. Tarkastellaan näitä kahta komponenttia tarkemmin.
+
+### Laite
+
+
+
+IoT:n **laite**-osa viittaa laitteeseen, joka voi olla vuorovaikutuksessa fyysisen maailman kanssa. Nämä laitteet ovat yleensä pieniä, edullisia tietokoneita, jotka toimivat alhaisilla nopeuksilla ja kuluttavat vähän virtaa – esimerkiksi yksinkertaisia mikrokontrollereita, joissa on vain kilotavuja RAM-muistia (verrattuna PC:n gigatavuihin) ja jotka toimivat vain muutamilla sadoilla megahertseillä (verrattuna PC:n gigahertseihin). Ne voivat kuluttaa niin vähän virtaa, että ne voivat toimia viikkoja, kuukausia tai jopa vuosia paristoilla.
+
+Nämä laitteet ovat vuorovaikutuksessa fyysisen maailman kanssa joko käyttämällä antureita ympäristönsä tietojen keräämiseen tai ohjaamalla ulostuloja tai toimilaitteita fyysisten muutosten tekemiseksi. Tyypillinen esimerkki on älykäs termostaatti – laite, jossa on lämpötila-anturi, tapa asettaa haluttu lämpötila, kuten säädin tai kosketusnäyttö, ja yhteys lämmitys- tai jäähdytysjärjestelmään, joka voidaan kytkeä päälle, kun havaittu lämpötila on halutun alueen ulkopuolella. Lämpötila-anturi havaitsee, että huone on liian kylmä, ja toimilaite kytkee lämmityksen päälle.
+
+
+
+IoT-laitteina voi toimia valtava määrä erilaisia laitteita, yksinkertaisista antureista yleiskäyttöisiin laitteisiin, jopa älypuhelimeesi! Älypuhelin voi käyttää antureita ympäristönsä havaitsemiseen ja toimilaitteita vuorovaikutukseen maailman kanssa – esimerkiksi GPS-anturia sijaintisi havaitsemiseen ja kaiutinta navigointiohjeiden antamiseen määränpäähän.
+
+✅ Mieti muita järjestelmiä, joita sinulla on ympärilläsi ja jotka lukevat tietoja anturista ja käyttävät niitä päätöksentekoon. Yksi esimerkki voisi olla uunin termostaatti. Löydätkö lisää?
+
+### Internet
+
+IoT-sovelluksen **Internet**-osa koostuu sovelluksista, joihin IoT-laite voi yhdistää lähettääkseen ja vastaanottaakseen tietoja, sekä muista sovelluksista, jotka voivat käsitellä IoT-laitteen tietoja ja auttaa tekemään päätöksiä siitä, mitä pyyntöjä lähettää IoT-laitteen toimilaitteille.
+
+Tyypillinen kokoonpano voisi olla jonkinlainen pilvipalvelu, johon IoT-laite yhdistää. Tämä pilvipalvelu hoitaa esimerkiksi tietoturvan, vastaanottaa viestejä IoT-laitteelta ja lähettää viestejä takaisin laitteelle. Tämä pilvipalvelu yhdistyy sitten muihin sovelluksiin, jotka voivat käsitellä tai tallentaa anturitietoja tai käyttää anturitietoja muiden järjestelmien tietojen kanssa päätöksenteossa.
+
+Laitteet eivät myöskään aina yhdistä suoraan Internetiin WiFi- tai langallisten yhteyksien kautta. Jotkut laitteet käyttävät mesh-verkkoja keskustellakseen keskenään Bluetoothin kaltaisten teknologioiden avulla, yhdistyen keskittimen kautta, jolla on Internet-yhteys.
+
+Esimerkkinä älykkäästä termostaatista, termostaatti yhdistyy kodin WiFi-verkon kautta pilvipalveluun. Se lähettää lämpötilatiedot tähän pilvipalveluun, josta ne tallennetaan jonkinlaiseen tietokantaan, jolloin kodinomistaja voi tarkistaa nykyiset ja aiemmat lämpötilat puhelinsovelluksella. Toinen pilvipalvelu tietää, mikä lämpötila kodinomistajaa miellyttää, ja lähettää viestejä IoT-laitteelle pilvipalvelun kautta kertoakseen lämmitysjärjestelmälle, milloin se kytketään päälle tai pois päältä.
+
+
+
+Älykkäämpi versio voisi käyttää pilvessä olevaa tekoälyä ja tietoja muista IoT-laitteisiin liitetyistä antureista, kuten tilan käyttöä havaitsevista antureista, sekä tietoja, kuten säätietoja ja jopa kalenteriasi, tehdäkseen päätöksiä lämpötilan asettamisesta älykkäästi. Esimerkiksi se voisi kytkeä lämmityksen pois päältä, jos kalenterisi mukaan olet lomalla, tai säätää lämmitystä huonekohtaisesti sen mukaan, mitä huoneita käytät, oppien datasta ajan myötä tarkemmaksi.
+
+
+
+✅ Mitä muita tietoja voisi käyttää tekemään Internet-yhdistetyistä termostaateista älykkäämpiä?
+
+### IoT reunalla
+
+Vaikka IoT:n I tarkoittaa Internetiä, näiden laitteiden ei tarvitse yhdistyä Internetiin. Joissain tapauksissa laitteet voivat yhdistyä 'reuna'-laitteisiin – yhdyskäytävä-laitteisiin, jotka toimivat paikallisessa verkossasi, jolloin voit käsitellä tietoja ilman Internet-yhteyttä. Tämä voi olla nopeampaa, kun dataa on paljon tai Internet-yhteys on hidas, mahdollistaa offline-tilan, kun Internet-yhteys ei ole mahdollinen, kuten laivalla tai humanitaarisen kriisin aikana, ja mahdollistaa tietojen yksityisyyden säilyttämisen. Jotkut laitteet sisältävät pilvityökaluilla luotua käsittelykoodia ja suorittavat sen paikallisesti kerätäkseen ja vastatakseen tietoihin ilman Internet-yhteyttä.
+
+Yksi esimerkki tästä on älykotilaite, kuten Apple HomePod, Amazon Alexa tai Google Home, joka kuuntelee ääntäsi pilvessä koulutettujen tekoälymallien avulla, mutta suorittaa ne paikallisesti laitteessa. Nämä laitteet 'heräävät', kun tietty sana tai lause sanotaan, ja lähettävät puheesi Internetiin vain silloin. Laite lopettaa puheen lähettämisen sopivassa kohdassa, kuten kun se havaitsee tauon puheessasi. Kaikki, mitä sanot ennen laitteen herättämistä herätyssanalla, ja kaikki, mitä sanot sen jälkeen, kun laite on lopettanut kuuntelun, ei lähetetä Internetiin laitteen tarjoajalle ja pysyy näin ollen yksityisenä.
+
+✅ Mieti muita tilanteita, joissa yksityisyys on tärkeää, joten datan käsittely olisi parempi tehdä reunalla kuin pilvessä. Vihjeenä – ajattele IoT-laitteita, joissa on kameroita tai muita kuvantamislaitteita.
+
+### IoT-tietoturva
+
+Kaikissa Internet-yhteyksissä tietoturva on tärkeä huomioitava asia. On vanha vitsi, että 'IoT:n S tarkoittaa tietoturvaa' – IoT:ssa ei ole S-kirjainta, mikä viittaa siihen, että se ei ole turvallinen.
+
+IoT-laitteet yhdistyvät pilvipalveluun ja ovat näin ollen vain yhtä turvallisia kuin kyseinen pilvipalvelu – jos pilvipalvelu sallii minkä tahansa laitteen yhdistämisen, haitallisia tietoja voidaan lähettää tai virushyökkäyksiä voi tapahtua. Tällä voi olla hyvin todellisia seurauksia, koska IoT-laitteet ovat vuorovaikutuksessa ja ohjaavat muita laitteita. Esimerkiksi [Stuxnet-mato](https://wikipedia.org/wiki/Stuxnet) manipuloi sentrifugien venttiilejä vahingoittaakseen niitä. Hakkerit ovat myös hyödyntäneet [heikkoa tietoturvaa päästäkseen käsiksi vauvamonitoreihin](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) ja muihin kodin valvontalaitteisiin.
+
+> 💁 Joskus IoT-laitteet ja reunalaitteet toimivat verkossa, joka on täysin eristetty Internetistä, jotta tiedot pysyvät yksityisinä ja turvallisina. Tätä kutsutaan [ilmarakoksi](https://wikipedia.org/wiki/Air_gap_(networking)).
+
+## Syvällisempi katsaus mikrokontrollereihin
+
+Edellisessä oppitunnissa esiteltiin mikrokontrollerit. Tarkastellaan niitä nyt tarkemmin.
+
+### Suoritin (CPU)
+
+Suoritin on mikrokontrollerin 'aivot'. Se on prosessori, joka suorittaa koodiasi ja voi lähettää ja vastaanottaa tietoja liitetyistä laitteista. Suorittimissa voi olla yksi tai useampi ydin – käytännössä yksi tai useampi prosessori, jotka voivat työskennellä yhdessä suorittaakseen koodiasi.
+
+Suorittimet toimivat kellon avulla, joka tikittää miljoonia tai miljardeja kertoja sekunnissa. Jokainen tikki, tai sykli, synkronoi toiminnot, joita suoritin voi suorittaa. Jokaisella tikillä suoritin voi suorittaa ohjelman käskyn, kuten hakea tietoja ulkoisesta laitteesta tai suorittaa matemaattisen laskelman. Tämä säännöllinen sykli mahdollistaa kaikkien toimintojen suorittamisen ennen seuraavan käskyn käsittelyä.
+
+Mitä nopeampi kellosykli, sitä enemmän käskyjä voidaan käsitellä sekunnissa ja sitä nopeampi suoritin on. Suorittimen nopeudet mitataan [hertseinä (Hz)](https://wikipedia.org/wiki/Hertz), joka on standardiyksikkö, jossa 1 Hz tarkoittaa yhtä sykliä tai kellotikkiä sekunnissa.
+
+> 🎓 Suorittimen nopeudet ilmoitetaan usein MHz- tai GHz-yksiköissä. 1 MHz on 1 miljoona Hz, 1 GHz on 1 miljardi Hz.
+
+> 💁 Suorittimet suorittavat ohjelmia käyttäen [fetch-decode-execute-sykliä](https://wikipedia.org/wiki/Instruction_cycle). Jokaisella kellotikillä suoritin hakee seuraavan käskyn muistista, dekoodaa sen ja suorittaa sen, esimerkiksi käyttämällä aritmeettis-loogista yksikköä (ALU) kahden luvun yhteenlaskuun. Jotkut suoritukset vievät useita tikkejä, joten seuraava sykli alkaa seuraavalla tikillä, kun käsky on suoritettu.
+
+
+
+Mikrokontrollereiden kellonopeudet ovat paljon alhaisempia kuin pöytätietokoneiden, kannettavien tietokoneiden tai useimpien älypuhelimien. Esimerkiksi Wio Terminalin suoritin toimii 120 MHz:n nopeudella eli 120 000 000 sykliä sekunnissa.
+
+✅ Keskimääräisessä PC:ssä tai Macissa on useita ytimiä sisältävä suoritin, joka toimii useilla gigahertseillä, mikä tarkoittaa, että kellot tikittävät miljardeja kertoja sekunnissa. Tutki tietokoneesi kellonopeutta ja vertaa, kuinka monta kertaa nopeampi se on kuin Wio Terminal.
+
+Jokainen kellosykli kuluttaa virtaa ja tuottaa lämpöä. Mitä nopeammin tikit, sitä enemmän virtaa kuluu ja lämpöä syntyy. PC:issä on jäähdytyselementtejä ja tuulettimia lämmön poistamiseksi, ilman niitä ne ylikuumenisivat ja sammuisivat sekunneissa. Mikrokontrollereissa ei usein ole kumpaakaan, koska ne toimivat paljon viileämmin ja siten paljon hitaammin. PC:t toimivat verkkovirralla tai suurilla akuilla muutaman tunnin ajan, kun taas mikrokontrollerit voivat toimia päiviä, kuukausia tai jopa vuosia pienillä akuilla. Mikrokontrollereissa voi myös olla ytimiä, jotka toimivat eri nopeuksilla, ja ne voivat vaihtaa hitaampiin vähävirtaisiin ytimiin, kun suorittimen kuormitus on alhainen, vähentääkseen virrankulutusta.
+
+> 💁 Jotkut PC:t ja Macit ottavat käyttöön samanlaisen yhdistelmän nopeita tehokkaita ytimiä ja hitaampia vähävirtaisia ytimiä, vaihtaen akun säästämiseksi. Esimerkiksi uusimpien Apple-läppäreiden M1-siru voi vaihtaa 4 suorituskykyytimen ja 4 tehokkuusytimen välillä optimoidakseen akun keston tai nopeuden riippuen suoritettavasta tehtävästä.
+
+✅ Tee hieman tutkimusta: Lue suorittimista [Wikipedia-artikkelista suorittimista](https://wikipedia.org/wiki/Central_processing_unit).
+
+#### Tehtävä
+
+Tutki Wio Terminalia.
+
+Jos käytät Wio Terminalia näissä oppitunneissa, yritä löytää suoritin. Etsi *Hardware Overview* -osio [Wio Terminalin tuotesivulta](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) nähdäksesi kuvan laitteen sisäosista ja yritä löytää suoritin laitteen takana olevan läpinäkyvän muovi-ikkunan kautta.
+
+### Muisti
+
+Mikrokontrollereissa on yleensä kahta tyyppistä muistia – ohjelmamuistia ja satunnaiskäyttöistä muistia (RAM).
+
+Ohjelmamuisti on ei-haihtuvaa, mikä tarkoittaa, että siihen tallennettu sisältö säilyy, vaikka laitteessa ei olisi virtaa. Tämä muisti tallentaa ohjelmakoodisi.
+
+RAM on muisti, jota ohjelma käyttää suorittaessaan, sisältäen ohjelman varaamat muuttujat ja oheislaitteista kerätyt tiedot. RAM on haihtuvaa, ja kun virta katkeaa, sen sisältö menetetään, mikä käytännössä nollaa ohjelmasi.
+🎓 Ohjelmamuisti tallentaa koodisi ja säilyy, vaikka virtaa ei olisi.
+🎓 RAMia käytetään ohjelman suorittamiseen, ja se nollautuu, kun virta katkeaa
+
+Kuten CPU:ssa, mikro-ohjaimen muisti on moninkertaisesti pienempi kuin PC:ssä tai Macissa. Tyypillisessä PC:ssä voi olla 8 gigatavua (GB) RAM-muistia, eli 8 000 000 000 tavua, joista jokainen tavu tarjoaa tilaa yhden kirjaimen tai numeron (0–255) tallentamiseen. Mikro-ohjaimessa RAM-muistia on vain kilotavuja (KB), ja kilotavu vastaa 1 000 tavua. Yllä mainitussa Wio Terminalissa on 192KB RAM-muistia, eli 192 000 tavua – yli 40 000 kertaa vähemmän kuin keskimääräisessä PC:ssä!
+
+Alla oleva kaavio näyttää suhteellisen kokoeron 192KB:n ja 8GB:n välillä – pieni piste keskellä edustaa 192KB:tä.
+
+
+
+Ohjelman tallennustila on myös pienempi kuin PC:ssä. Tyypillisessä PC:ssä voi olla 500GB:n kiintolevy ohjelmien tallennusta varten, kun taas mikro-ohjaimessa tallennustilaa on vain kilotavuja tai ehkä muutama megatavu (MB) (1MB on 1 000KB, eli 1 000 000 tavua). Wio Terminalissa on 4MB ohjelman tallennustilaa.
+
+✅ Tee hieman tutkimusta: Kuinka paljon RAM-muistia ja tallennustilaa tietokoneessasi on, jolla luet tätä? Kuinka tämä vertautuu mikro-ohjaimeen?
+
+### Syöttö ja lähtö
+
+Mikro-ohjaimet tarvitsevat syöttö- ja lähtöliitäntöjä (I/O) lukemaan dataa sensoreista ja lähettämään ohjaussignaaleja toimilaitteille. Niissä on yleensä useita yleiskäyttöisiä syöttö-/lähtöliitäntöjä (GPIO-pinnit). Näitä pinnejä voidaan ohjelmallisesti määrittää syötöksi (eli ne vastaanottavat signaalin) tai lähdöksi (ne lähettävät signaalin).
+
+🧠⬅️ Syöttöpinnejä käytetään sensorien arvojen lukemiseen
+
+🧠➡️ Lähtöpinnejä käytetään ohjeiden lähettämiseen toimilaitteille
+
+✅ Opit tästä lisää seuraavassa oppitunnissa.
+
+#### Tehtävä
+
+Tutki Wio Terminalia.
+
+Jos käytät Wio Terminalia näissä oppitunneissa, etsi GPIO-pinnit. Löydä *Pinout diagram* -osio [Wio Terminal -tuotesivulta](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) ja opi, mitkä pinnit ovat mitä. Wio Terminalissa on mukana tarra, jonka voit kiinnittää laitteen taakse pin-numeroiden kanssa, joten lisää tämä nyt, jos et ole jo tehnyt niin.
+
+### Fyysinen koko
+
+Mikro-ohjaimet ovat tyypillisesti pieniä kooltaan, ja pienin, [Freescale Kinetis KL03 MCU, mahtuu golfpallon kuoppaan](https://www.edn.com/tiny-arm-cortex-m0-based-mcu-shrinks-package/). Pelkkä PC:n CPU voi olla kooltaan 40mm x 40mm, eikä tämä sisällä jäähdytyselementtejä ja tuulettimia, jotka tarvitaan varmistamaan, että CPU voi toimia muutamaa sekuntia pidempään ylikuumenematta – huomattavasti suurempi kuin kokonainen mikro-ohjain. Wio Terminal -kehityspaketti, jossa on mikro-ohjain, kotelo, näyttö ja joukko liitäntöjä ja komponentteja, ei ole paljon suurempi kuin paljas Intel i9 CPU, ja huomattavasti pienempi kuin CPU jäähdytyselementin ja tuulettimen kanssa!
+
+| Laite | Koko |
+| ------------------------------- | --------------------- |
+| Freescale Kinetis KL03 | 1.6mm x 2mm x 1mm |
+| Wio Terminal | 72mm x 57mm x 12mm |
+| Intel i9 CPU, jäähdytyselementti ja tuuletin | 136mm x 145mm x 103mm |
+
+### Kehykset ja käyttöjärjestelmät
+
+Hitaan nopeuden ja pienen muistin vuoksi mikro-ohjaimet eivät käytä käyttöjärjestelmää (OS) siinä mielessä kuin työpöytäkoneet. Käyttöjärjestelmä, joka saa tietokoneesi toimimaan (Windows, Linux tai macOS), tarvitsee paljon muistia ja prosessointitehoa suorittaakseen tehtäviä, jotka ovat täysin tarpeettomia mikro-ohjaimelle. Muista, että mikro-ohjaimet ohjelmoidaan yleensä suorittamaan yksi tai useampi hyvin spesifinen tehtävä, toisin kuin yleiskäyttöinen tietokone, kuten PC tai Mac, joka tarvitsee tukea käyttöliittymälle, musiikin tai elokuvien toistolle, työkaluille dokumenttien tai koodin kirjoittamiseen, pelien pelaamiseen tai Internetin selaamiseen.
+
+Mikro-ohjaimen ohjelmointiin ilman käyttöjärjestelmää tarvitaan työkaluja, jotka mahdollistavat koodin rakentamisen tavalla, jonka mikro-ohjain voi suorittaa, käyttäen API:ita, jotka voivat kommunikoida oheislaitteiden kanssa. Jokainen mikro-ohjain on erilainen, joten valmistajat tukevat yleensä standardikehyksiä, jotka mahdollistavat standardin 'reseptin' seuraamisen koodin rakentamiseksi ja sen suorittamiseksi millä tahansa mikro-ohjaimella, joka tukee kyseistä kehystä.
+
+Mikro-ohjaimia voi ohjelmoida käyttöjärjestelmällä – usein viitataan reaaliaikaisena käyttöjärjestelmänä (RTOS), koska ne on suunniteltu käsittelemään datan lähettämistä ja vastaanottamista oheislaitteista reaaliajassa. Nämä käyttöjärjestelmät ovat erittäin kevyitä ja tarjoavat ominaisuuksia, kuten:
+
+* Monisäikeisyys, joka mahdollistaa useamman koodilohkon suorittamisen samanaikaisesti, joko useilla ytimillä tai vuorotellen yhdellä ytimellä
+* Verkkoyhteydet, jotka mahdollistavat turvallisen kommunikoinnin Internetin kautta
+* Graafiset käyttöliittymäkomponentit (GUI) käyttöliittymien (UI) rakentamiseen laitteille, joissa on näyttö.
+
+✅ Lue lisää eri RTOS-järjestelmistä: [Azure RTOS](https://azure.microsoft.com/services/rtos/?WT.mc_id=academic-17441-jabenn), [FreeRTOS](https://www.freertos.org), [Zephyr](https://www.zephyrproject.org)
+
+#### Arduino
+
+
+
+[Arduino](https://www.arduino.cc) on luultavasti suosituin mikro-ohjainkehys, erityisesti opiskelijoiden, harrastajien ja valmistajien keskuudessa. Arduino on avoimen lähdekoodin elektroniikka-alusta, joka yhdistää ohjelmiston ja laitteiston. Voit ostaa Arduino-yhteensopivia kortteja Arduinolta itseltään tai muilta valmistajilta ja koodata sitten Arduino-kehyksen avulla.
+
+Arduino-kortit ohjelmoidaan C- tai C++-kielellä. C/C++:n käyttö mahdollistaa koodin kompiloimisen erittäin pieneksi ja sen nopean suorittamisen, mikä on tarpeen rajoitetussa laitteessa, kuten mikro-ohjaimessa. Arduino-sovelluksen ydin tunnetaan nimellä sketch, ja se on C/C++-koodia, jossa on kaksi funktiota – `setup` ja `loop`. Kun kortti käynnistyy, Arduino-kehyskoodi suorittaa `setup`-funktion kerran, ja sitten se suorittaa `loop`-funktion uudelleen ja uudelleen, jatkuvasti, kunnes virta katkaistaan.
+
+Kirjoittaisit alustuslogiikkasi `setup`-funktioon, kuten WiFi-yhteyden muodostamisen ja pilvipalveluihin yhdistämisen tai pinnejä syötölle ja lähdölle alustettaessa. `loop`-funktioon sisältyisi prosessointikoodi, kuten sensorin lukeminen ja arvon lähettäminen pilveen. Lisäisit yleensä viiveen jokaiseen silmukkaan, esimerkiksi jos haluat sensoridatan lähetettävän vain 10 sekunnin välein, lisäisit 10 sekunnin viiveen silmukan loppuun, jotta mikro-ohjain voi nukkua, säästää virtaa ja suorittaa silmukan uudelleen tarvittaessa 10 sekunnin kuluttua.
+
+
+
+✅ Tämä ohjelma-arkkitehtuuri tunnetaan nimellä *tapahtumasilmukka* tai *viestisilmukka*. Monet sovellukset käyttävät tätä taustalla, ja se on standardi useimmille työpöytäsovelluksille, jotka toimivat käyttöjärjestelmissä kuten Windows, macOS tai Linux. `loop` kuuntelee viestejä käyttöliittymäkomponenteilta, kuten painikkeilta, tai laitteilta, kuten näppäimistöltä, ja reagoi niihin. Voit lukea lisää tästä [artikkelista tapahtumasilmukasta](https://wikipedia.org/wiki/Event_loop).
+
+Arduino tarjoaa standardikirjastoja mikro-ohjainten ja I/O-pinnien kanssa vuorovaikutukseen, joissa on erilaisia toteutuksia taustalla eri mikro-ohjaimilla toimimiseen. Esimerkiksi [`delay`-funktio](https://www.arduino.cc/reference/en/language/functions/time/delay/) pysäyttää ohjelman tietyn ajan, [`digitalRead`-funktio](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/) lukee arvon `HIGH` tai `LOW` annetusta pinnistä riippumatta siitä, millä kortilla koodi suoritetaan. Nämä standardikirjastot tarkoittavat, että yhdelle kortille kirjoitettu Arduino-koodi voidaan kääntää uudelleen mille tahansa muulle Arduino-kortille ja se toimii, olettaen että pinnit ovat samat ja kortit tukevat samoja ominaisuuksia.
+
+Arduino-ekosysteemissä on suuri määrä kolmannen osapuolen kirjastoja, jotka mahdollistavat lisäominaisuuksien lisäämisen Arduino-projekteihin, kuten sensorien ja toimilaitteiden käytön tai pilvi-IoT-palveluihin yhdistämisen.
+
+##### Tehtävä
+
+Tutki Wio Terminalia.
+
+Jos käytät Wio Terminalia näissä oppitunneissa, lue uudelleen koodi, jonka kirjoitit edellisessä oppitunnissa. Etsi `setup`- ja `loop`-funktiot. Tarkkaile sarjaportin tulostusta, kun `loop`-funktio kutsutaan toistuvasti. Kokeile lisätä koodia `setup`-funktioon kirjoittaaksesi sarjaporttiin ja huomaa, että tämä koodi kutsutaan vain kerran joka kerta, kun laite käynnistetään uudelleen. Kokeile käynnistää laite uudelleen sivussa olevalla virtakytkimellä ja näytä, että tämä koodi kutsutaan joka kerta, kun laite käynnistetään uudelleen.
+
+## Syvällisempi katsaus yhden piirilevyn tietokoneisiin
+
+Edellisessä oppitunnissa esiteltiin yhden piirilevyn tietokoneet. Tarkastellaan nyt niitä syvällisemmin.
+
+### Raspberry Pi
+
+
+
+[Raspberry Pi Foundation](https://www.raspberrypi.org) on brittiläinen hyväntekeväisyysjärjestö, joka perustettiin vuonna 2009 edistämään tietojenkäsittelytieteen opiskelua erityisesti kouluissa. Osana tätä tehtävää he kehittivät yhden piirilevyn tietokoneen, nimeltään Raspberry Pi. Raspberry Pi:t ovat tällä hetkellä saatavilla kolmessa versiossa – täysikokoinen versio, pienempi Pi Zero ja laskentamoduuli, joka voidaan rakentaa lopulliseen IoT-laitteeseen.
+
+
+
+Viimeisin täysikokoisen Raspberry Pi:n versio on Raspberry Pi 4B. Siinä on neliytiminen (4 ydintä) CPU, joka toimii 1.5GHz:n nopeudella, 2, 4 tai 8GB RAM-muistia, gigabitin ethernet, WiFi, 2 HDMI-porttia, jotka tukevat 4k-näyttöjä, ääni- ja komposiittivideolähtöportti, USB-portit (2 USB 2.0, 2 USB 3.0), 40 GPIO-pinniä, kameraliitin Raspberry Pi -kameramoduulille ja SD-korttipaikka. Kaikki tämä piirilevyllä, joka on kooltaan 88mm x 58mm x 19.5mm ja saa virtansa 3A USB-C-virtalähteestä. Näiden hinta alkaa 35 Yhdysvaltain dollarista, mikä on paljon halvempi kuin PC tai Mac.
+
+> 💁 Saatavilla on myös Pi400, joka on all-in-one-tietokone, jossa Pi4 on rakennettu näppäimistöön.
+
+
+
+Pi Zero on paljon pienempi ja vähävirtaisempi. Siinä on yksiytiminen 1GHz CPU, 512MB RAM-muistia, WiFi (Zero W -mallissa), yksi HDMI-portti, yksi micro-USB-portti, 40 GPIO-pinniä, kameraliitin Raspberry Pi -kameramoduulille ja SD-korttipaikka. Sen mitat ovat 65mm x 30mm x 5mm, ja se kuluttaa hyvin vähän virtaa. Zero maksaa 5 Yhdysvaltain dollaria, ja W-versio, jossa on WiFi, maksaa 10 dollaria.
+
+> 🎓 Molempien CPU:t ovat ARM-prosessoreita, toisin kuin Intel/AMD x86- tai x64-prosessorit, joita löytyy useimmista PC:istä ja Mac-tietokoneista. Nämä ovat samanlaisia kuin prosessorit, joita löytyy joistakin mikro-ohjaimista, sekä lähes kaikista matkapuhelimista, Microsoft Surface X:stä ja uusista Apple Silicon -pohjaisista Apple Mac -tietokoneista.
+
+Kaikki Raspberry Pi -versiot käyttävät Debian Linux -versiota nimeltä Raspberry Pi OS. Tämä on saatavilla kevyenä versiona ilman työpöytää, mikä on täydellinen 'päättömiin' projekteihin, joissa näyttöä ei tarvita, tai täysversiona, jossa on täysi työpöytäympäristö, verkkoselain, toimisto-ohjelmat, koodausvälineet ja pelejä. Koska käyttöjärjestelmä on Debian Linux -versio, voit asentaa minkä tahansa sovelluksen tai työkalun, joka toimii Debianissa ja on rakennettu Pi:n sisällä olevalle ARM-prosessorille.
+
+#### Tehtävä
+
+Tutki Raspberry Pi:tä.
+
+Jos käytät Raspberry Pi:tä näissä oppitunneissa, lue lisää piirilevyn eri laitteistokomponenteista.
+
+* Löydät tietoja käytetyistä prosessoreista [Raspberry Pi -laitteistodokumentaatiosta](https://www.raspberrypi.org/documentation/hardware/raspberrypi/). Lue prosessorista, jota Pi:ssäsi käytetään.
+* Etsi GPIO-pinnit. Lue lisää niistä [Raspberry Pi GPIO -dokumentaatiosta](https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md). Käytä [GPIO Pin Usage -opasta](https://www.raspberrypi.org/documentation/usage/gpio/README.md) tunnistaaksesi Pi:si eri pinnit.
+
+### Yhden piirilevyn tietokoneiden ohjelmointi
+
+Yhden piirilevyn tietokoneet ovat täysiä tietokoneita, joissa on täysi käyttöjärjestelmä. Tämä tarkoittaa, että niiden ohjelmointiin on käytettävissä laaja valikoima ohjelmointikieliä, kehyksiä ja työkaluja, toisin kuin mikro-ohjaimet, jotka ovat riippuvaisia kortin tuesta kehyksissä, kuten Arduino. Useimmat ohjelmointikielet sisältävät kirjastoja, jotka voivat käyttää GPIO-pinnejä sensorien ja toimilaitteiden datan lähettämiseen ja vastaanottamiseen.
+
+✅ Mitä ohjelmointikieliä osaat? Tukevatko ne Linuxia?
+
+Yleisin ohjelmointikieli IoT-sovellusten rakentamiseen Raspberry Pi:llä on Python. Pi:lle suunniteltu laitteistoekosysteemi on valtava, ja lähes kaikki näistä sisältävät tarvittavan koodin niiden käyttämiseksi Python-kirjastoina. Jotkut näistä ekosysteemeistä perustuvat 'hattuihin' – niin kutsuttuihin, koska ne istuvat Pi:n päällä kuin hattu ja yhdistyvät suurella liittimellä 40 GPIO-pinniin. Nämä hatut tarjoavat lisäominaisuuksia, kuten näyttöjä, sensoreita, kauko-ohjattavia autoja tai sovittimia, jotka mahdollistavat sensorien liittämisen standardoiduilla kaapeleilla.
+### Yksikorttitietokoneiden käyttö ammattimaisissa IoT-sovelluksissa
+
+Yksikorttitietokoneita käytetään ammattimaisissa IoT-sovelluksissa, ei pelkästään kehitysalustoina. Ne tarjoavat tehokkaan tavan ohjata laitteistoa ja suorittaa monimutkaisia tehtäviä, kuten koneoppimismallien ajamista. Esimerkiksi [Raspberry Pi 4 compute module](https://www.raspberrypi.org/blog/raspberry-pi-compute-module-4/) tarjoaa kaiken Raspberry Pi 4:n tehon, mutta kompaktimmassa ja edullisemmassa muodossa ilman useimpia portteja, ja se on suunniteltu asennettavaksi räätälöityyn laitteistoon.
+
+---
+
+## 🚀 Haaste
+
+Viime oppitunnin haasteena oli listata niin monta IoT-laitetta kuin mahdollista, jotka löytyvät kodistasi, koulustasi tai työpaikastasi. Jokaisen laitteen kohdalla mieti, onko se rakennettu mikro-ohjaimien, yksikorttitietokoneiden vai näiden yhdistelmän ympärille.
+
+## Oppitunnin jälkeinen kysely
+
+[Oppitunnin jälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/4)
+
+## Kertaus ja itseopiskelu
+
+* Lue [Arduino-aloitusopas](https://www.arduino.cc/en/Guide/Introduction) ymmärtääksesi enemmän Arduino-alustasta.
+* Lue [esittely Raspberry Pi 4:stä](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/) oppiaksesi lisää Raspberry Pi -laitteista.
+* Tutustu joihinkin käsitteisiin ja lyhenteisiin [What the FAQ are CPUs, MPUs, MCUs, and GPUs -artikkelissa Electrical Engineering Journalissa](https://www.eejournal.com/article/what-the-faq-are-cpus-mpus-mcus-and-gpus/).
+
+✅ Käytä näitä oppaita sekä kustannustietoja, jotka löytyvät seuraamalla linkkejä [laitteisto-oppaassa](../../../hardware.md), päättääksesi, mitä laitteistoalustaa haluat käyttää, tai haluatko mieluummin käyttää virtuaalista laitetta.
+
+## Tehtävä
+
+[Vertaa ja vertaile mikro-ohjaimia ja yksikorttitietokoneita](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/2-deeper-dive/assignment.md b/translations/fi/1-getting-started/lessons/2-deeper-dive/assignment.md
new file mode 100644
index 00000000..2641b9a3
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/2-deeper-dive/assignment.md
@@ -0,0 +1,26 @@
+
+# Mikro-ohjainten ja yhden piirilevyn tietokoneiden vertailu
+
+## Ohjeet
+
+Tässä oppitunnissa käsiteltiin mikro-ohjaimia ja yhden piirilevyn tietokoneita. Luo taulukko, jossa vertaillaan ja vastakkainasetetaan näitä kahta, ja mainitse vähintään 2 syytä, miksi käyttäisit mikro-ohjainta yhden piirilevyn tietokoneen sijaan, sekä vähintään 2 syytä, miksi käyttäisit yhden piirilevyn tietokonetta mikro-ohjaimen sijaan.
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannettavaa |
+| -------- | ----------- | -------- | ------------- |
+| Luo taulukko, jossa vertaillaan mikro-ohjaimia ja yhden piirilevyn tietokoneita | Luo lista, jossa on useita kohtia, jotka vertailevat ja vastakkainasettavat oikein | Luo lista, jossa on vain muutama kohta | Pystyi luomaan vain yhden kohdan tai ei yhtään kohtaa vertaillakseen ja vastakkainasettaakseen |
+| Syyt käyttää toista toisen sijaan | Pystyi antamaan 2 tai enemmän syitä mikro-ohjaimille ja 2 tai enemmän syitä yhden piirilevyn tietokoneille | Pystyi antamaan vain 1-2 syytä mikro-ohjaimille ja 1-2 syytä yhden piirilevyn tietokoneille | Ei pystynyt antamaan 1 tai useampaa syytä mikro-ohjaimille tai yhden piirilevyn tietokoneille |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/README.md b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/README.md
new file mode 100644
index 00000000..8d8301f6
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/README.md
@@ -0,0 +1,230 @@
+
+# Vuorovaikutus fyysisen maailman kanssa antureiden ja toimilaitteiden avulla
+
+
+
+> Sketchnote: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+Tämä oppitunti oli osa [Hello IoT -sarjaa](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) [Microsoft Reactorilta](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Oppitunti koostui kahdesta videosta: tunnin mittaisesta oppitunnista ja tunnin mittaisesta toimistotunnista, jossa syvennyttiin oppitunnin osiin ja vastattiin kysymyksiin.
+
+[](https://youtu.be/Lqalu1v6aF4)
+
+[](https://youtu.be/qR3ekcMlLWA)
+
+> 🎥 Klikkaa yllä olevia kuvia katsoaksesi videot
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/5)
+
+## Johdanto
+
+Tässä oppitunnissa tutustutaan kahteen tärkeään IoT-laitteen käsitteeseen: antureihin ja toimilaitteisiin. Pääset myös käytännössä kokeilemaan molempia lisäämällä valosensorin IoT-projektiisi ja sen jälkeen LED-valon, joka reagoi valon määrään, käytännössä luoden yövalon.
+
+Tässä oppitunnissa käsitellään:
+
+* [Mitä anturit ovat?](../../../../../1-getting-started/lessons/3-sensors-and-actuators)
+* [Anturin käyttö](../../../../../1-getting-started/lessons/3-sensors-and-actuators)
+* [Anturityypit](../../../../../1-getting-started/lessons/3-sensors-and-actuators)
+* [Mitä toimilaitteet ovat?](../../../../../1-getting-started/lessons/3-sensors-and-actuators)
+* [Toimilaitteen käyttö](../../../../../1-getting-started/lessons/3-sensors-and-actuators)
+* [Toimilaitetyypit](../../../../../1-getting-started/lessons/3-sensors-and-actuators)
+
+## Mitä anturit ovat?
+
+Anturit ovat laitteita, jotka havaitsevat fyysisen maailman - ne mittaavat yhtä tai useampaa ominaisuutta ympäristöstään ja lähettävät tiedot IoT-laitteelle. Antureita on valtava määrä, koska mitattavia asioita on niin paljon, kuten luonnollisia ominaisuuksia, kuten ilman lämpötila, tai fyysisiä vuorovaikutuksia, kuten liike.
+
+Joidenkin yleisten antureiden esimerkkejä:
+
+* Lämpötila-anturit - mittaavat ilman lämpötilaa tai sen kohteen lämpötilaa, johon ne on upotettu. Harrastelijoille ja kehittäjille nämä yhdistetään usein ilmanpaine- ja kosteusantureihin yhdeksi sensoriksi.
+* Painikkeet - havaitsevat, kun niitä painetaan.
+* Valoanturit - mittaavat valon määrää ja voivat olla erikoistuneita tiettyihin väreihin, UV-valoon, IR-valoon tai yleiseen näkyvään valoon.
+* Kamerat - havaitsevat visuaalisen esityksen maailmasta ottamalla valokuvan tai suoratoistamalla videota.
+* Kiihtyvyysanturit - mittaavat liikettä useissa suunnissa.
+* Mikrofonit - havaitsevat ääntä, joko yleistä äänenvoimakkuutta tai suunnattua ääntä.
+
+✅ Tee tutkimusta. Mitä antureita puhelimessasi on?
+
+Kaikilla antureilla on yksi yhteinen piirre - ne muuntavat havaitsemansa asian sähköiseksi signaaliksi, jonka IoT-laite voi tulkita. Sähköisen signaalin tulkinta riippuu anturista sekä viestintäprotokollasta, jota käytetään IoT-laitteen kanssa kommunikointiin.
+
+## Anturin käyttö
+
+Seuraa alla olevia ohjeita lisätäksesi anturin IoT-laitteeseesi:
+
+* [Arduino - Wio Terminal](wio-terminal-sensor.md)
+* [Yksikorttitietokone - Raspberry Pi](pi-sensor.md)
+* [Yksikorttitietokone - Virtuaalilaite](virtual-device-sensor.md)
+
+## Anturityypit
+
+Anturit ovat joko analogisia tai digitaalisia.
+
+### Analogiset anturit
+
+Yksinkertaisimmat anturit ovat analogisia antureita. Nämä anturit vastaanottavat jännitteen IoT-laitteelta, anturikomponentit säätävät tätä jännitettä, ja anturista palaava jännite mitataan anturiarvon saamiseksi.
+
+> 🎓 Jännite mittaa, kuinka paljon voimaa on sähkövirran siirtämiseksi paikasta toiseen, kuten pariston positiivisesta navasta negatiiviseen napaan. Esimerkiksi tavallinen AA-paristo on 1,5V (V on volttien symboli) ja voi siirtää sähköä 1,5V voimalla positiivisesta navasta negatiiviseen napaan. Eri sähkökomponentit vaativat eri jännitteitä toimiakseen, esimerkiksi LED-valo voi syttyä 2-3V:lla, mutta 100W hehkulamppu tarvitsee 240V. Voit lukea lisää jännitteestä [Wikipedia-sivulta](https://wikipedia.org/wiki/Voltage).
+
+Yksi esimerkki on potentiometri. Tämä on säädin, jota voi kiertää kahden asennon välillä, ja anturi mittaa kiertokulman.
+
+
+
+IoT-laite lähettää sähköisen signaalin potentiometrille tietyllä jännitteellä, kuten 5 volttia (5V). Kun potentiometriä säädetään, se muuttaa ulostulevaa jännitettä. Kuvittele, että sinulla on potentiometri, joka on merkitty asteikolla 0–[11](https://wikipedia.org/wiki/Up_to_eleven), kuten vahvistimen äänenvoimakkuuden säädin. Kun potentiometri on täysin pois päältä (0), ulos tulee 0V (0 volttia). Kun se on täysin päällä (11), ulos tulee 5V (5 volttia).
+
+> 🎓 Tämä on yksinkertaistus, ja voit lukea lisää potentiometreistä ja muuttuvista vastuksista [Wikipedia-sivulta](https://wikipedia.org/wiki/Potentiometer).
+
+Anturista tuleva jännite luetaan IoT-laitteella, ja laite voi reagoida siihen. Riippuen anturista, tämä jännite voi olla mielivaltainen arvo tai se voi vastata standardiyksikköä. Esimerkiksi analoginen lämpötila-anturi, joka perustuu [termistoriin](https://wikipedia.org/wiki/Thermistor), muuttaa vastustaan lämpötilan mukaan. Ulostulojännite voidaan sitten muuntaa lämpötilaksi Kelvinissä ja vastaavasti °C tai °F yksiköiksi laskemalla koodissa.
+
+✅ Mitä luulet tapahtuvan, jos anturi palauttaa korkeamman jännitteen kuin mitä sille lähetettiin (esimerkiksi ulkoisesta virtalähteestä)? ⛔️ ÄLÄ testaa tätä.
+
+#### Analogisen signaalin muuntaminen digitaaliseksi
+
+IoT-laitteet ovat digitaalisia - ne eivät voi käsitellä analogisia arvoja, vaan toimivat vain 0:lla ja 1:llä. Tämä tarkoittaa, että analogiset anturiarvot täytyy muuntaa digitaaliseksi signaaliksi ennen niiden käsittelyä. Monilla IoT-laitteilla on analogi-digitaalimuuntimia (ADC), jotka muuntavat analogiset syötteet niiden digitaalisiksi vastineiksi. Anturit voivat myös toimia ADC:n kanssa liitäntälevyn kautta. Esimerkiksi Seeed Grove -ekosysteemissä Raspberry Pi:n kanssa analogiset anturit liitetään tiettyihin portteihin "hatissa", joka istuu Pi:n GPIO-pinnien päällä, ja tämä hattu sisältää ADC:n, joka muuntaa jännitteen digitaaliseksi signaaliksi, joka voidaan lähettää Pi:n GPIO-pinnien kautta.
+
+Kuvittele, että sinulla on analoginen valoanturi, joka on kytketty IoT-laitteeseen, joka käyttää 3,3V ja palauttaa arvon 1V. Tämä 1V ei tarkoita mitään digitaalisessa maailmassa, joten se täytyy muuntaa. Jännite muunnetaan analogiseksi arvoksi asteikolla, joka riippuu laitteesta ja anturista. Yksi esimerkki on Seeed Grove -valoanturi, joka tuottaa arvoja välillä 0–1 023. Tälle anturille, joka toimii 3,3V:lla, 1V ulostulo olisi arvo 300. IoT-laite ei voi käsitellä 300:aa analogisena arvona, joten arvo muunnettaisiin `0000000100101100`:ksi, joka on 300:n binääriesitys Grove-hatilla. Tämä käsiteltäisiin sitten IoT-laitteella.
+
+✅ Jos et tunne binäärijärjestelmää, tee pieni tutkimus oppiaksesi, miten numerot esitetään 0:lla ja 1:llä. [BBC Bitesize -binäärijärjestelmän johdanto](https://www.bbc.co.uk/bitesize/guides/zwsbwmn/revision/1) on hyvä paikka aloittaa.
+
+Koodauksen näkökulmasta kaikki tämä hoidetaan yleensä antureiden mukana tulevilla kirjastoilla, joten sinun ei tarvitse huolehtia tästä muunnoksesta itse. Grove-valoanturin tapauksessa käyttäisit Python-kirjastoa ja kutsuisit `light`-ominaisuutta tai Arduino-kirjastoa ja kutsuisit `analogRead`-funktiota saadaksesi arvon 300.
+
+### Digitaaliset anturit
+
+Digitaaliset anturit, kuten analogiset anturit, havaitsevat ympäröivän maailman sähköisen jännitteen muutosten avulla. Erona on, että ne tuottavat digitaalisen signaalin joko mittaamalla vain kaksi tilaa tai käyttämällä sisäänrakennettua ADC:tä. Digitaaliset anturit ovat yhä yleisempiä, jotta ADC:tä ei tarvitse käyttää liitäntälevyssä tai IoT-laitteessa.
+
+Yksinkertaisin digitaalinen anturi on painike tai kytkin. Tämä on anturi, jolla on kaksi tilaa: päällä tai pois päältä.
+
+
+
+IoT-laitteiden pinnit, kuten GPIO-pinnit, voivat mitata tämän signaalin suoraan 0:na tai 1:nä. Jos lähetetty jännite on sama kuin palautettu jännite, luettu arvo on 1, muuten luettu arvo on 0. Signaalia ei tarvitse muuntaa, sillä se voi olla vain 1 tai 0.
+
+> 💁 Jännitteet eivät koskaan ole täysin tarkkoja, erityisesti koska anturin komponentit aiheuttavat jonkin verran vastusta, joten yleensä on olemassa toleranssi. Esimerkiksi Raspberry Pi:n GPIO-pinnit toimivat 3,3V:lla ja lukevat palautussignaalin yli 1,8V:na 1:ksi, alle 1,8V:na 0:ksi.
+
+* 3,3V menee painikkeeseen. Painike on pois päältä, joten ulos tulee 0V, mikä antaa arvon 0.
+* 3,3V menee painikkeeseen. Painike on päällä, joten ulos tulee 3,3V, mikä antaa arvon 1.
+
+Kehittyneemmät digitaaliset anturit lukevat analogisia arvoja ja muuntavat ne sisäänrakennetuilla ADC:illä digitaalisiksi signaaleiksi. Esimerkiksi digitaalinen lämpötila-anturi käyttää edelleen termoelementtiä samalla tavalla kuin analoginen anturi ja mittaa edelleen jännitteen muutosta, joka johtuu termoelementin vastuksesta nykyisessä lämpötilassa. Sen sijaan, että se palauttaisi analogisen arvon ja luottaisi laitteen tai liitäntälevyn muuntavan sen digitaaliseksi signaaliksi, anturiin sisäänrakennettu ADC muuntaa arvon ja lähettää sen sarjana 0:ia ja 1:iä IoT-laitteelle. Nämä 0:t ja 1:t lähetetään samalla tavalla kuin painikkeen digitaalinen signaali, jossa 1 on täysi jännite ja 0 on 0V.
+
+
+
+Digitaalisen datan lähettäminen mahdollistaa antureiden monimutkaistumisen ja yksityiskohtaisemman datan lähettämisen, jopa salatun datan turvallisille antureille. Yksi esimerkki on kamera. Tämä on anturi, joka tallentaa kuvan ja lähettää sen digitaalisena datana, joka sisältää kuvan, yleensä pakatussa muodossa, kuten JPEG, IoT-laitteen luettavaksi. Se voi jopa suoratoistaa videota tallentamalla kuvia ja lähettämällä joko täydellisen kuvan kehys kerrallaan tai pakatun videovirran.
+
+## Mitä toimilaitteet ovat?
+
+Toimilaitteet ovat antureiden vastakohta - ne muuntavat IoT-laitteelta tulevan sähköisen signaalin vuorovaikutukseksi fyysisen maailman kanssa, kuten valon tai äänen tuottamiseksi tai moottorin liikuttamiseksi.
+
+Joidenkin yleisten toimilaitteiden esimerkkejä:
+
+* LED - tuottaa valoa, kun se kytketään päälle.
+* Kaiutin - tuottaa ääntä lähetetyn signaalin perusteella, yksinkertaisesta summerista musiikkia soittavaan kaiuttimeen.
+* Askelmoottori - muuntaa signaalin määritettyyn määrään kiertoa, kuten säätimen kääntämiseen 90°.
+* Rele - kytkimiä, jotka voidaan kytkeä päälle tai pois päältä sähköisellä signaalilla. Ne mahdollistavat IoT-laitteen pienen jännitteen kytkemisen suurempiin jännitteisiin.
+* Näytöt - monimutkaisempia toimilaitteita, jotka näyttävät tietoa monisegmenttinäytöllä. Näytöt vaihtelevat yksinkertaisista LED-näytöistä korkearesoluutioisiin videomonitoriin.
+
+✅ Tee tutkimusta. Mitä toimilaitteita puhelimessasi on?
+
+## Toimilaitteen käyttö
+
+Seuraa alla olevia ohjeita lisätäksesi toimilaitteen IoT-laitteeseesi, jota ohjataan anturilla, rakentaaksesi IoT-yövalon. Se kerää valon määrän valoanturista ja käyttää toimilaitetta, kuten LED-valoa, tuottamaan valoa, kun havaittu valon määrä on liian alhainen.
+
+
+
+* [Arduino - Wio Terminal](wio-terminal-actuator.md)
+* [Yksikorttitietokone - Raspberry Pi](pi-actuator.md)
+* [Yksikorttitietokone - Virtuaalilaite](virtual-device-actuator.md)
+
+## Toimilaitetyypit
+
+Kuten anturit, toimilaitteet ovat joko analogisia tai digitaalisia.
+
+### Analogiset toimilaitteet
+
+Analogiset toimilaitteet ottavat analogisen signaalin ja muuntavat sen jonkinlaiseksi vuorovaikutukseksi, jossa vuorovaikutus muuttuu syötetyn jännitteen mukaan.
+
+Yksi esimerkki on himmennettävä valo, kuten ne, joita saatat käyttää kotonasi. Valon kirkkaus määräytyy syötetyn jännitteen mukaan.
+
+
+Kuten antureiden kanssa, varsinainen IoT-laite toimii digitaalisilla signaaleilla, ei analogisilla. Tämä tarkoittaa, että analogisen signaalin lähettämiseksi IoT-laitteessa täytyy olla digitaalista analogiseksi muuntava laite (DAC), joko suoraan IoT-laitteessa tai liitäntälevyssä. Tämä muuntaa IoT-laitteen 0:t ja 1:t analogiseksi jännitteeksi, jota toimilaite voi käyttää.
+
+✅ Mitä luulet tapahtuvan, jos IoT-laite lähettää suuremman jännitteen kuin toimilaite pystyy käsittelemään?
+⛔️ ÄLÄ kokeile tätä.
+
+#### Pulssinleveysmodulaatio
+
+Toinen vaihtoehto IoT-laitteen digitaalisten signaalien muuntamiseksi analogiseksi signaaliksi on pulssinleveysmodulaatio (PWM). Tämä tarkoittaa, että lähetetään paljon lyhyitä digitaalisia pulsseja, jotka toimivat ikään kuin ne olisivat analogisia signaaleja.
+
+Esimerkiksi PWM:ää voidaan käyttää moottorin nopeuden säätämiseen.
+
+Kuvittele, että ohjaat moottoria 5V:n virtalähteellä. Lähetät lyhyen pulssin moottorillesi, jolloin jännite nousee korkeaksi (5V) kahden sadasosan sekunnin ajaksi (0,02s). Tänä aikana moottori voi pyöriä yhden kymmenesosan kierroksesta eli 36°. Signaali sitten taukoaa kahden sadasosan sekunnin ajaksi (0,02s), jolloin lähetetään matala signaali (0V). Jokainen sykli, jossa jännite on ensin päällä ja sitten pois, kestää 0,04s. Sykli toistuu.
+
+
+
+Tämä tarkoittaa, että yhdessä sekunnissa lähetetään 25 5V:n pulssia, jotka kestävät 0,02s ja pyörittävät moottoria, ja jokaisen pulssin jälkeen on 0,02s tauko, jolloin moottori ei pyöri. Jokainen pulssi pyörittää moottoria yhden kymmenesosan kierroksesta, mikä tarkoittaa, että moottori tekee 2,5 kierrosta sekunnissa. Olet käyttänyt digitaalista signaalia pyörittämään moottoria 2,5 kierrosta sekunnissa eli 150 [kierrosta minuutissa](https://wikipedia.org/wiki/Revolutions_per_minute) (RPM, epästandardi pyörimisnopeuden mitta).
+
+```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
+```
+
+> 🎓 Kun PWM-signaali on päällä puolet ajasta ja pois päältä puolet ajasta, sitä kutsutaan [50% työsykliksi](https://wikipedia.org/wiki/Duty_cycle). Työsyklit mitataan prosenttiosuutena ajasta, jolloin signaali on päällä verrattuna aikaan, jolloin se on pois päältä.
+
+
+
+Voit muuttaa moottorin nopeutta muuttamalla pulssien kokoa. Esimerkiksi saman moottorin kanssa voit pitää syklin ajan samana, 0,04s, mutta puolittaa päällä olevan pulssin ajan 0,01s:iin ja lisätä pois päältä olevan pulssin ajan 0,03s:iin. Pulssien määrä sekunnissa pysyy samana (25), mutta jokainen päällä oleva pulssi on puolet lyhyempi. Puolikas pulssi pyörittää moottoria vain yhden kahdeskymmenesosan kierroksesta, ja 25 pulssilla sekunnissa moottori tekee 1,25 kierrosta sekunnissa eli 75 RPM. Muuttamalla digitaalisen signaalin pulssin nopeutta olet puolittanut analogisen moottorin nopeuden.
+
+```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
+```
+
+✅ Miten pitäisit moottorin pyörimisen tasaisena, erityisesti alhaisilla nopeuksilla? Käyttäisitkö pientä määrää pitkiä pulsseja ja pitkiä taukoja vai paljon hyvin lyhyitä pulsseja ja hyvin lyhyitä taukoja?
+
+> 💁 Jotkut anturit käyttävät myös PWM:ää muuntaakseen analogiset signaalit digitaalisiksi.
+
+> 🎓 Voit lukea lisää pulssinleveysmodulaatiosta [Wikipedia-sivulta pulssinleveysmodulaatio](https://wikipedia.org/wiki/Pulse-width_modulation).
+
+### Digitaaliset toimilaitteet
+
+Digitaaliset toimilaitteet, kuten digitaaliset anturit, ovat joko kahdessa tilassa, joita ohjataan korkealla tai matalalla jännitteellä, tai niissä on sisäänrakennettu DAC, joka voi muuntaa digitaalisen signaalin analogiseksi.
+
+Yksi yksinkertainen digitaalinen toimilaite on LED. Kun laite lähettää digitaalisen signaalin 1, lähetetään korkea jännite, joka sytyttää LEDin. Kun lähetetään digitaalinen signaali 0, jännite laskee 0V:iin ja LED sammuu.
+
+
+
+✅ Mitä muita yksinkertaisia kaksitilaisia toimilaitteita keksit? Yksi esimerkki on solenoidi, joka on sähkömagneetti, jota voidaan aktivoida tekemään asioita, kuten siirtämään oven salpaa lukitsemalla/avaamalla oven.
+
+Kehittyneemmät digitaaliset toimilaitteet, kuten näytöt, vaativat digitaalisen datan lähettämistä tietyissä formaateissa. Niissä on yleensä mukana kirjastoja, jotka helpottavat oikean datan lähettämistä niiden ohjaamiseksi.
+
+---
+
+## 🚀 Haaste
+
+Viimeisten kahden oppitunnin haasteena oli listata niin monta IoT-laitetta kuin mahdollista, jotka ovat kotonasi, koulussasi tai työpaikallasi, ja päättää, onko ne rakennettu mikro-ohjaimien vai yksikorttitietokoneiden ympärille, vai jopa näiden yhdistelmään.
+
+Jokaisen listaamasi laitteen kohdalla, mihin antureihin ja toimilaitteisiin ne ovat kytketty? Mikä on kunkin anturin ja toimilaitteen tarkoitus näissä laitteissa?
+
+## Oppitunnin jälkeinen kysely
+
+[Oppitunnin jälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/6)
+
+## Kertaus ja itseopiskelu
+
+* Lue sähköstä ja virtapiireistä [ThingLearn-sivustolla](http://thinglearn.jenlooper.com/curriculum/).
+* Lue eri tyyppisistä lämpötila-antureista [Seeed Studiosin lämpötila-antureiden oppaassa](https://www.seeedstudio.com/blog/2019/10/14/temperature-sensors-for-arduino-projects/)
+* Lue LED-valoista [Wikipedia LED-sivulla](https://wikipedia.org/wiki/Light-emitting_diode)
+
+## Tehtävä
+
+[Tutki antureita ja toimilaitteita](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/assignment.md b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/assignment.md
new file mode 100644
index 00000000..fb52ed7f
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/assignment.md
@@ -0,0 +1,31 @@
+
+# Tutki antureita ja toimilaitteita
+
+## Ohjeet
+
+Tässä oppitunnissa käsiteltiin antureita ja toimilaitteita. Tutki ja kuvaile yksi anturi ja yksi toimilaite, joita voidaan käyttää IoT-kehityspaketin kanssa, mukaan lukien:
+
+* Mitä se tekee
+* Mitä elektroniikkaa/laitteistoa sen sisällä käytetään
+* Onko se analoginen vai digitaalinen
+* Mitkä ovat sen yksiköt ja syötteiden tai mittausten vaihteluväli
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parantamisen varaa |
+| -------- | ----------- | -------- | ------------------ |
+| Kuvaile anturi | Kuvaillut anturin sisältäen yksityiskohdat kaikista yllä mainituista neljästä kohdasta. | Kuvaillut anturin, mutta pystynyt antamaan tiedot vain 2-3 kohdasta yllä. | Kuvaillut anturin, mutta pystynyt antamaan tiedot vain yhdestä kohdasta yllä. |
+| Kuvaile toimilaite | Kuvaillut toimilaitteen sisältäen yksityiskohdat kaikista yllä mainituista neljästä kohdasta. | Kuvaillut toimilaitteen, mutta pystynyt antamaan tiedot vain 2-3 kohdasta yllä. | Kuvaillut toimilaitteen, mutta pystynyt antamaan tiedot vain yhdestä kohdasta yllä. |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md
new file mode 100644
index 00000000..06b87df3
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md
@@ -0,0 +1,130 @@
+
+# Rakenna yövalo - Raspberry Pi
+
+Tässä osassa oppituntia lisäät LED-valon Raspberry Pi:hin ja käytät sitä yövalon luomiseen.
+
+## Laitteisto
+
+Yövalo tarvitsee nyt toimilaitteen.
+
+Toimilaite on **LED**, [valoa emittoiva diodi](https://wikipedia.org/wiki/Light-emitting_diode), joka tuottaa valoa, kun sen läpi kulkee virta. Tämä on digitaalinen toimilaite, jolla on kaksi tilaa: päällä ja pois päältä. Arvon 1 lähettäminen kytkee LED-valon päälle, ja arvo 0 kytkee sen pois päältä. LED on ulkoinen Grove-toimilaite, joka täytyy liittää Grove Base -hattuun Raspberry Pi:ssä.
+
+Yövalon logiikka pseudokoodina:
+
+```output
+Check the light level.
+If the light is less than 300
+ Turn the LED on
+Otherwise
+ Turn the LED off
+```
+
+### Liitä LED
+
+Grove LED tulee moduulina, jossa on valikoima LED-valoja, joten voit valita haluamasi värin.
+
+#### Tehtävä - liitä LED
+
+Liitä LED.
+
+
+
+1. Valitse suosikkisi LED-valo ja aseta sen jalat LED-moduulin kahteen reikään.
+
+ LED-valot ovat valoa emittoivia diodeja, ja diodit ovat elektronisia komponentteja, jotka voivat kuljettaa virtaa vain yhteen suuntaan. Tämä tarkoittaa, että LED täytyy liittää oikein päin, muuten se ei toimi.
+
+ Yksi LED-valon jaloista on positiivinen pinni, toinen negatiivinen pinni. LED ei ole täysin pyöreä ja on hieman litteämpi toiselta puolelta. Litteämpi puoli on negatiivinen pinni. Kun liität LED-valon moduuliin, varmista, että pyöreämmän puolen pinni on liitetty moduulin ulkopuolella olevaan **+**-merkittyyn liittimeen ja litteämpi puoli on liitetty moduulin keskellä olevaan liittimeen.
+
+1. LED-moduulissa on pyörityspainike, jolla voi säätää kirkkautta. Käännä tämä aluksi täysin auki kiertämällä sitä vastapäivään niin pitkälle kuin se menee pienellä ristipääruuvimeisselillä.
+
+1. Aseta Grove-kaapelin toinen pää LED-moduulin liittimeen. Se menee sisään vain yhdellä tavalla.
+
+1. Kun Raspberry Pi on sammutettu, liitä Grove-kaapelin toinen pää Grove Base -hatun digitaaliseen liittimeen, joka on merkitty **D5**. Tämä liitin on toinen vasemmalta GPIO-pinnien vieressä olevassa liitinrivissä.
+
+
+
+## Ohjelmoi yövalo
+
+Yövalo voidaan nyt ohjelmoida käyttämällä Grove-valoanturia ja Grove-LED-valoa.
+
+### Tehtävä - ohjelmoi yövalo
+
+Ohjelmoi yövalo.
+
+1. Käynnistä Pi ja odota, että se käynnistyy.
+
+1. Avaa yövaloprojekti VS Code -editorissa, jonka loit tämän tehtävän aiemmassa osassa, joko suoraan Pi:llä tai Remote SSH -laajennuksen avulla.
+
+1. Lisää seuraava koodi `app.py`-tiedostoon tuodaksesi tarvittavan kirjaston. Tämä tulisi lisätä yläosaan muiden `import`-rivien alle.
+
+ ```python
+ from grove.grove_led import GroveLed
+ ```
+
+ `from grove.grove_led import GroveLed` -lause tuo `GroveLed`-luokan Grove Python -kirjastoista. Tämä kirjasto sisältää koodia Grove-LED-valon kanssa toimimiseen.
+
+1. Lisää seuraava koodi `light_sensor`-määrittelyn jälkeen luodaksesi instanssin luokasta, joka hallitsee LED-valoa:
+
+ ```python
+ led = GroveLed(5)
+ ```
+
+ Rivi `led = GroveLed(5)` luo instanssin `GroveLed`-luokasta, joka on liitetty pinniin **D5** - digitaaliseen Grove-pinniin, johon LED on liitetty.
+
+ > 💁 Kaikilla liittimillä on yksilölliset pinninumerot. Pinnit 0, 2, 4 ja 6 ovat analogisia pinnejä, pinnit 5, 16, 18, 22, 24 ja 26 ovat digitaalisia pinnejä.
+
+1. Lisää tarkistus `while`-silmukan sisään ja ennen `time.sleep`-riviä tarkistaaksesi valotasot ja kytkeäksesi LED-valon päälle tai pois päältä:
+
+ ```python
+ if light < 300:
+ led.on()
+ else:
+ led.off()
+ ```
+
+ Tämä koodi tarkistaa `light`-arvon. Jos arvo on alle 300, se kutsuu `GroveLed`-luokan `on`-metodia, joka lähettää digitaalisen arvon 1 LED-valolle, kytkien sen päälle. Jos valon arvo on 300 tai enemmän, se kutsuu `off`-metodia, joka lähettää digitaalisen arvon 0 LED-valolle, kytkien sen pois päältä.
+
+ > 💁 Tämä koodi tulisi sisentää samalle tasolle kuin `print('Light level:', light)`-rivi, jotta se on `while`-silmukan sisällä!
+
+ > 💁 Kun digitaalisia arvoja lähetetään toimilaitteille, arvo 0 vastaa 0V, ja arvo 1 vastaa laitteen maksimijännitettä. Raspberry Pi:ssä Grove-antureiden ja -toimilaitteiden kanssa arvo 1 vastaa 3.3V.
+
+1. Suorita seuraava komento VS Code -editorin terminaalista käynnistääksesi Python-sovelluksesi:
+
+ ```sh
+ python3 app.py
+ ```
+
+ Valoarvot tulostuvat konsoliin.
+
+ ```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. Peitä ja paljasta valoanturi. Huomaa, kuinka LED-valo syttyy, jos valotaso on 300 tai vähemmän, ja sammuu, kun valotaso on yli 300.
+
+ > 💁 Jos LED ei syty, varmista, että se on liitetty oikein päin ja pyörityspainike on asetettu täysille.
+
+
+
+> 💁 Löydät tämän koodin [code-actuator/pi](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/pi) -kansiosta.
+
+😀 Yövaloprojektisi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md
new file mode 100644
index 00000000..283b6831
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md
@@ -0,0 +1,110 @@
+
+# Rakenna yövalo - Raspberry Pi
+
+Tässä osassa oppituntia lisäät valosensorin Raspberry Pi:hin.
+
+## Laitteisto
+
+Tämän oppitunnin sensori on **valosensori**, joka käyttää [valodiodia](https://wikipedia.org/wiki/Photodiode) muuntamaan valon sähköiseksi signaaliksi. Tämä on analoginen sensori, joka lähettää kokonaislukuarvon välillä 0–1 000, ilmaisten suhteellisen valon määrän, joka ei vastaa mitään standardoitua mittayksikköä, kuten [luksia](https://wikipedia.org/wiki/Lux).
+
+Valosensori on ulkoinen Grove-sensori, ja se täytyy liittää Raspberry Pi:n Grove Base -hattuun.
+
+### Liitä valosensori
+
+Grove-valosensori, jota käytetään valotason havaitsemiseen, täytyy liittää Raspberry Pi:hin.
+
+#### Tehtävä - liitä valosensori
+
+Liitä valosensori
+
+
+
+1. Työnnä Grove-kaapelin toinen pää valosensorimoduulin liittimeen. Se menee sisään vain yhdellä tavalla.
+
+1. Kun Raspberry Pi on sammutettu, liitä Grove-kaapelin toinen pää Grove Base -hatun analogiseen liittimeen, joka on merkitty **A0**. Tämä liitin on toinen oikealta GPIO-pinnien vieressä olevassa liitinrivissä.
+
+
+
+## Ohjelmoi valosensori
+
+Laite voidaan nyt ohjelmoida käyttämällä Grove-valosensoria.
+
+### Tehtävä - ohjelmoi valosensori
+
+Ohjelmoi laite.
+
+1. Käynnistä Pi ja odota, että se käynnistyy.
+
+1. Avaa yövaloprojekti VS Code -editorissa, jonka loit tämän tehtävän aiemmassa osassa, joko suoraan Pi:llä tai käyttämällä Remote SSH -laajennusta.
+
+1. Avaa `app.py`-tiedosto ja poista siitä kaikki koodi.
+
+1. Lisää seuraava koodi `app.py`-tiedostoon tarvittavien kirjastojen tuomiseksi:
+
+ ```python
+ import time
+ from grove.grove_light_sensor_v1_2 import GroveLightSensor
+ ```
+
+ `import time` -lause tuo `time`-moduulin, jota käytetään myöhemmin tässä tehtävässä.
+
+ `from grove.grove_light_sensor_v1_2 import GroveLightSensor` -lause tuo `GroveLightSensor`-luokan Grove Python -kirjastoista. Tämä kirjasto sisältää koodin Grove-valosensorin kanssa toimimiseen ja asennettiin globaalisti Pi:n asennuksen aikana.
+
+1. Lisää seuraava koodi edellisen koodin jälkeen luodaksesi instanssin luokasta, joka hallitsee valosensoria:
+
+ ```python
+ light_sensor = GroveLightSensor(0)
+ ```
+
+ Rivi `light_sensor = GroveLightSensor(0)` luo instanssin `GroveLightSensor`-luokasta, joka on yhdistetty pinniin **A0** – analogiseen Grove-pinniin, johon valosensori on liitetty.
+
+1. Lisää loputtomasti toistuva silmukka edellisen koodin jälkeen, jotta valosensorin arvo voidaan kysyä ja tulostaa konsoliin:
+
+ ```python
+ while True:
+ light = light_sensor.light
+ print('Light level:', light)
+ ```
+
+ Tämä lukee nykyisen valotason asteikolla 0–1 023 käyttämällä `light`-ominaisuutta `GroveLightSensor`-luokasta. Tämä ominaisuus lukee analogisen arvon pinnistä. Tämä arvo tulostetaan sitten konsoliin.
+
+1. Lisää pieni yhden sekunnin viive silmukan loppuun, koska valotasoja ei tarvitse tarkistaa jatkuvasti. Viive vähentää laitteen virrankulutusta.
+
+ ```python
+ time.sleep(1)
+ ```
+
+1. Aja seuraava komento VS Code -editorin terminaalista käynnistääksesi Python-sovelluksesi:
+
+ ```sh
+ python3 app.py
+ ```
+
+ Valoarvot tulostuvat konsoliin. Peitä ja paljasta valosensori, ja arvot muuttuvat:
+
+ ```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
+ ```
+
+> 💁 Löydät tämän koodin [code-sensor/pi](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/pi) -kansiosta.
+
+😀 Sensorin lisääminen yövaloprojektiisi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md
new file mode 100644
index 00000000..d07c05fc
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md
@@ -0,0 +1,124 @@
+
+# Rakenna yövalo - Virtuaalinen IoT-laitteisto
+
+Tässä oppitunnin osassa lisäät LED-valon virtuaaliseen IoT-laitteeseesi ja käytät sitä yövalon luomiseen.
+
+## Virtuaalinen laitteisto
+
+Yövalo tarvitsee yhden toimilaitteen, joka luodaan CounterFit-sovelluksessa.
+
+Toimilaite on **LED**. Fyysisessä IoT-laitteessa se olisi [valoa emittoiva diodi](https://wikipedia.org/wiki/Light-emitting_diode), joka tuottaa valoa, kun sen läpi kulkee sähkövirta. Tämä on digitaalinen toimilaite, jolla on kaksi tilaa: päällä ja pois päältä. Arvon 1 lähettäminen kytkee LED-valon päälle, ja arvo 0 kytkee sen pois päältä.
+
+Yövalon logiikka pseudokoodina:
+
+```output
+Check the light level.
+If the light is less than 300
+ Turn the LED on
+Otherwise
+ Turn the LED off
+```
+
+### Lisää toimilaite CounterFit-sovellukseen
+
+Virtuaalisen LED-valon käyttämiseksi sinun täytyy lisätä se CounterFit-sovellukseen.
+
+#### Tehtävä - lisää toimilaite CounterFit-sovellukseen
+
+Lisää LED CounterFit-sovellukseen.
+
+1. Varmista, että CounterFit-verkkosovellus on käynnissä edellisen tehtävän osan jäljiltä. Jos ei, käynnistä se uudelleen ja lisää valosensori uudelleen.
+
+1. Luo LED:
+
+ 1. *Create actuator* -laatikossa *Actuator* -paneelissa, avaa *Actuator type* -valikko ja valitse *LED*.
+
+ 1. Aseta *Pin* arvoksi *5*.
+
+ 1. Valitse **Add**-painike luodaksesi LED Pin 5:lle.
+
+ 
+
+ LED luodaan ja se ilmestyy toimilaitteiden listaan.
+
+ 
+
+ Kun LED on luotu, voit muuttaa sen väriä *Color*-valitsimella. Valitse **Set**-painike muuttaaksesi väriä valinnan jälkeen.
+
+### Ohjelmoi yövalo
+
+Yövalo voidaan nyt ohjelmoida käyttämällä CounterFit-valosensoria ja LED-valoa.
+
+#### Tehtävä - ohjelmoi yövalo
+
+Ohjelmoi yövalo.
+
+1. Avaa yövaloprojekti VS Code -editorissa, jonka loit edellisen tehtävän osassa. Sulje ja luo terminaali uudelleen varmistaaksesi, että se käyttää virtuaalista ympäristöä tarvittaessa.
+
+1. Avaa `app.py`-tiedosto.
+
+1. Lisää seuraava koodi `app.py`-tiedoston alkuun muiden `import`-rivien alle tuodaksesi tarvittavan kirjaston:
+
+ ```python
+ from counterfit_shims_grove.grove_led import GroveLed
+ ```
+
+ `from counterfit_shims_grove.grove_led import GroveLed` -rivi tuo `GroveLed`-luokan CounterFit Grove -shim Python-kirjastoista. Tämä kirjasto sisältää koodin LED-valon hallintaan, joka on luotu CounterFit-sovelluksessa.
+
+1. Lisää seuraava koodi `light_sensor`-määrittelyn jälkeen luodaksesi instanssin luokasta, joka hallitsee LED-valoa:
+
+ ```python
+ led = GroveLed(5)
+ ```
+
+ Rivi `led = GroveLed(5)` luo instanssin `GroveLed`-luokasta, joka yhdistetään pinniin **5** - CounterFit Grove -pinniin, johon LED on kytketty.
+
+1. Lisää tarkistus `while`-silmukan sisään, ennen `time.sleep`-riviä, tarkistaaksesi valotasot ja kytkeäksesi LED-valon päälle tai pois päältä:
+
+ ```python
+ if light < 300:
+ led.on()
+ else:
+ led.off()
+ ```
+
+ Tämä koodi tarkistaa `light`-arvon. Jos arvo on alle 300, se kutsuu `GroveLed`-luokan `on`-metodia, joka lähettää digitaalisen arvon 1 LED-valolle, kytkien sen päälle. Jos valon arvo on 300 tai suurempi, se kutsuu `off`-metodia, joka lähettää digitaalisen arvon 0 LED-valolle, kytkien sen pois päältä.
+
+ > 💁 Tämä koodi tulee sisentää samalle tasolle kuin `print('Light level:', light)`-rivi, jotta se on `while`-silmukan sisällä!
+
+1. Suorita seuraava komento VS Code -terminaalista ajaaksesi Python-sovelluksesi:
+
+ ```sh
+ python3 app.py
+ ```
+
+ Valoarvot tulostuvat konsoliin.
+
+ ```output
+ (.venv) ➜ GroveTest python3 app.py
+ Light level: 143
+ Light level: 244
+ Light level: 246
+ Light level: 253
+ ```
+
+1. Muuta *Value*- tai *Random*-asetuksia vaihdellaksesi valotasoa yli ja alle 300. LED-valo kytkeytyy päälle ja pois päältä.
+
+
+
+> 💁 Löydät tämän koodin [code-actuator/virtual-device](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/virtual-device) -kansiosta.
+
+😀 Yövalon ohjelmointi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md
new file mode 100644
index 00000000..f87ba7e3
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md
@@ -0,0 +1,124 @@
+
+# Rakenna yövalo - Virtuaalinen IoT-laitteisto
+
+Tässä osassa oppituntia lisäät valosensorin virtuaaliseen IoT-laitteeseesi.
+
+## Virtuaalinen laitteisto
+
+Yövalo tarvitsee yhden sensorin, joka luodaan CounterFit-sovelluksessa.
+
+Sensori on **valosensori**. Fyysisessä IoT-laitteessa se olisi [valodiodi](https://wikipedia.org/wiki/Photodiode), joka muuntaa valon sähköiseksi signaaliksi. Valosensorit ovat analogisia sensoreita, jotka lähettävät kokonaislukuarvon, joka ilmaisee suhteellisen valon määrän. Tämä arvo ei vastaa mitään standardoitua mittayksikköä, kuten [luksia](https://wikipedia.org/wiki/Lux).
+
+### Lisää sensorit CounterFitiin
+
+Virtuaalisen valosensorin käyttämiseksi sinun täytyy lisätä se CounterFit-sovellukseen.
+
+#### Tehtävä - lisää sensorit CounterFitiin
+
+Lisää valosensori CounterFit-sovellukseen.
+
+1. Varmista, että CounterFit-verkkosovellus on käynnissä edellisen tehtävän osan jäljiltä. Jos ei, käynnistä se.
+
+1. Luo valosensori:
+
+ 1. *Create sensor* -laatikossa *Sensors*-paneelissa avaa *Sensor type* -valikko ja valitse *Light*.
+
+ 1. Jätä *Units* asetukseksi *NoUnits*.
+
+ 1. Varmista, että *Pin* on asetettu arvoon *0*.
+
+ 1. Valitse **Add**-painike luodaksesi valosensorin Pin 0:aan.
+
+ 
+
+ Valosensori luodaan ja se ilmestyy sensorilistaan.
+
+ 
+
+## Ohjelmoi valosensori
+
+Laite voidaan nyt ohjelmoida käyttämään sisäänrakennettua valosensoria.
+
+### Tehtävä - ohjelmoi valosensori
+
+Ohjelmoi laite.
+
+1. Avaa yövaloprojekti VS Codessa, jonka loit edellisen tehtävän osassa. Sulje ja luo uusi pääte varmistaaksesi, että se käyttää virtuaaliympäristöä, jos tarpeen.
+
+1. Avaa tiedosto `app.py`.
+
+1. Lisää seuraava koodi `app.py`-tiedoston alkuun muiden `import`-lauselmien joukkoon tuodaksesi tarvittavat kirjastot:
+
+ ```python
+ import time
+ from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor
+ ```
+
+ `import time` -lauselma tuo Pythonin `time`-moduulin, jota käytetään myöhemmin tässä tehtävässä.
+
+ `from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor` -lauselma tuo `GroveLightSensor`-luokan CounterFit Grove -shim Python -kirjastoista. Tämä kirjasto sisältää koodin, jolla voidaan käyttää CounterFit-sovelluksessa luotua valosensoria.
+
+1. Lisää seuraava koodi tiedoston loppuun luodaksesi luokkainstansseja, jotka hallitsevat valosensoria:
+
+ ```python
+ light_sensor = GroveLightSensor(0)
+ ```
+
+ Rivi `light_sensor = GroveLightSensor(0)` luo `GroveLightSensor`-luokan instanssin, joka yhdistyy pinniin **0** - CounterFit Grove -pinniin, johon valosensori on liitetty.
+
+1. Lisää loputtomaan silmukkaan koodi, joka lukee valosensorin arvon ja tulostaa sen konsoliin:
+
+ ```python
+ while True:
+ light = light_sensor.light
+ print('Light level:', light)
+ ```
+
+ Tämä lukee nykyisen valotason käyttämällä `light`-ominaisuutta `GroveLightSensor`-luokasta. Tämä ominaisuus lukee analogisen arvon pinnistä. Tämä arvo tulostetaan sitten konsoliin.
+
+1. Lisää pieni yhden sekunnin viive `while`-silmukan loppuun, koska valotasoja ei tarvitse tarkistaa jatkuvasti. Viive vähentää laitteen virrankulutusta.
+
+ ```python
+ time.sleep(1)
+ ```
+
+1. Suorita seuraava komento VS Coden päätteen kautta käynnistääksesi Python-sovelluksesi:
+
+ ```sh
+ python3 app.py
+ ```
+
+ Valoarvot tulostuvat konsoliin. Aluksi tämä arvo on 0.
+
+1. Muuta CounterFit-sovelluksessa valosensorin arvoa, jonka sovellus lukee. Voit tehdä tämän kahdella tavalla:
+
+ * Syötä numero *Value*-kenttään valosensorille ja valitse **Set**-painike. Syöttämäsi numero on arvo, jonka sensori palauttaa.
+
+ * Valitse *Random*-valintaruutu ja syötä *Min*- ja *Max*-arvot, sitten valitse **Set**-painike. Joka kerta, kun sensori lukee arvon, se lukee satunnaisen numeron *Min*- ja *Max*-arvojen väliltä.
+
+ Asettamasi arvot tulostuvat konsoliin. Muuta *Value*- tai *Random*-asetuksia saadaksesi arvon muuttumaan.
+
+ ```output
+ (.venv) ➜ GroveTest python3 app.py
+ Light level: 143
+ Light level: 244
+ Light level: 246
+ Light level: 253
+ ```
+
+> 💁 Löydät tämän koodin [code-sensor/virtual-device](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/virtual-device) -kansiosta.
+
+😀 Yövalosovelluksesi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulee pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskääntämistä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinkäsityksistä tai virhetulkinnoista.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md
new file mode 100644
index 00000000..3e5c6ab0
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md
@@ -0,0 +1,124 @@
+
+# Rakenna yövalo - Wio Terminal
+
+Tässä osassa oppituntia lisäät LED-valon Wio Terminal -laitteeseesi ja käytät sitä yövalon luomiseen.
+
+## Laitteisto
+
+Yövalo tarvitsee nyt toimilaitteen.
+
+Toimilaitteena toimii **LED**, [valoa emittoiva diodi](https://wikipedia.org/wiki/Light-emitting_diode), joka tuottaa valoa, kun sen läpi kulkee virta. Tämä on digitaalinen toimilaite, jolla on kaksi tilaa: päällä ja pois päältä. Arvon 1 lähettäminen kytkee LED-valon päälle, ja arvo 0 sammuttaa sen. Tämä on ulkoinen Grove-toimilaite, joka täytyy liittää Wio Terminal -laitteeseen.
+
+Yövalon logiikka pseudokoodina:
+
+```output
+Check the light level.
+If the light is less than 300
+ Turn the LED on
+Otherwise
+ Turn the LED off
+```
+
+### Liitä LED
+
+Grove LED tulee moduulina, jossa on valikoima LED-valoja, joten voit valita haluamasi värin.
+
+#### Tehtävä - liitä LED
+
+Liitä LED.
+
+
+
+1. Valitse suosikkisi LED-valo ja aseta sen jalat LED-moduulin kahteen reikään.
+
+ LED-valot ovat valoa emittoivia diodeja, ja diodit ovat elektronisia komponentteja, jotka kuljettavat virtaa vain yhteen suuntaan. Tämä tarkoittaa, että LED-valo täytyy liittää oikein päin, muuten se ei toimi.
+
+ Yksi LED-valon jaloista on positiivinen pinni, toinen negatiivinen pinni. LED-valo ei ole täysin pyöreä, vaan sen toinen puoli on hieman litteämpi. Litteämpi puoli on negatiivinen pinni. Kun liität LED-valon moduuliin, varmista, että pyöreämmän puolen pinni on liitetty moduulin ulkopuolella olevaan **+**-merkinnällä varustettuun liittimeen, ja litteämpi puoli on liitetty moduulin keskiosaa lähempänä olevaan liittimeen.
+
+1. LED-moduulissa on pyörivä säätönappi, jolla voit säätää kirkkautta. Käännä tämä aluksi täysin auki kiertämällä sitä vastapäivään niin pitkälle kuin se menee pienellä ristipääruuvimeisselillä.
+
+1. Aseta Grove-kaapelin toinen pää LED-moduulin liittimeen. Se menee sisään vain yhdellä tavalla.
+
+1. Kun Wio Terminal ei ole liitetty tietokoneeseen tai muuhun virtalähteeseen, liitä Grove-kaapelin toinen pää Wio Terminal -laitteen oikeanpuoleiseen Grove-liittimeen, kun katsot näyttöä. Tämä liitin on kauimpana virtapainikkeesta.
+
+ > 💁 Oikeanpuoleista Grove-liitintä voidaan käyttää analogisten tai digitaalisten antureiden ja toimilaitteiden kanssa. Vasemmanpuoleinen liitin on tarkoitettu vain digitaalisten antureiden ja toimilaitteiden käyttöön. C käsitellään myöhemmässä oppitunnissa.
+
+
+
+## Ohjelmoi yövalo
+
+Yövalo voidaan nyt ohjelmoida käyttämällä sisäänrakennettua valosensoria ja Grove LED-valoa.
+
+### Tehtävä - ohjelmoi yövalo
+
+Ohjelmoi yövalo.
+
+1. Avaa yövaloprojekti VS Code -ohjelmassa, jonka loit tämän tehtävän aiemmassa osassa.
+
+1. Lisää seuraava rivi `setup`-funktion loppuun:
+
+ ```cpp
+ pinMode(D0, OUTPUT);
+ ```
+
+ Tämä rivi määrittää pinnin, jota käytetään LED-valon kanssa kommunikointiin Grove-portin kautta.
+
+ `D0`-pinni on digitaalinen pinni oikeanpuoleiselle Grove-liittimelle. Tämä pinni asetetaan `OUTPUT`-tilaan, mikä tarkoittaa, että se yhdistetään toimilaitteeseen ja dataa kirjoitetaan pinnille.
+
+1. Lisää seuraava koodi heti `delay`-kohdan eteen loop-funktiossa:
+
+ ```cpp
+ if (light < 300)
+ {
+ digitalWrite(D0, HIGH);
+ }
+ else
+ {
+ digitalWrite(D0, LOW);
+ }
+ ```
+
+ Tämä koodi tarkistaa `light`-arvon. Jos arvo on alle 300, se lähettää `HIGH`-arvon `D0`-digitaalipinnille. Tämä `HIGH`-arvo on 1, joka kytkee LED-valon päälle. Jos valo on 300 tai enemmän, pinnille lähetetään `LOW`-arvo, joka on 0, ja LED-valo sammuu.
+
+ > 💁 Kun lähetetään digitaalisia arvoja toimilaitteille, LOW-arvo on 0v, ja HIGH-arvo on laitteen maksimijännite. Wio Terminal -laitteessa HIGH-jännite on 3.3V.
+
+1. Liitä Wio Terminal uudelleen tietokoneeseesi ja lataa uusi koodi kuten aiemmin.
+
+1. Liitä Serial Monitor. Valoarvot tulostuvat terminaaliin.
+
+ ```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. Peitä ja paljasta valosensori. Huomaa, kuinka LED-valo syttyy, jos valotaso on 300 tai vähemmän, ja sammuu, kun valotaso on yli 300.
+
+
+
+> 💁 Löydät tämän koodin [code-actuator/wio-terminal](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/wio-terminal) -kansiosta.
+
+😀 Yövalon ohjelmointi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md
new file mode 100644
index 00000000..b3136680
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md
@@ -0,0 +1,87 @@
+
+# Lisää sensori - Wio Terminal
+
+Tässä osassa oppituntia käytät Wio Terminalin valosensoria.
+
+## Laitteisto
+
+Tämän oppitunnin sensori on **valosensori**, joka käyttää [valodiodia](https://wikipedia.org/wiki/Photodiode) muuntaakseen valon sähköiseksi signaaliksi. Tämä on analoginen sensori, joka lähettää kokonaislukuarvon välillä 0–1 023, mikä ilmaisee suhteellisen valon määrän. Tämä arvo ei vastaa mitään standardoitua mittayksikköä, kuten [luksia](https://wikipedia.org/wiki/Lux).
+
+Valosensori on sisäänrakennettu Wio Terminaliin ja näkyy laitteen takana olevan kirkkaan muovi-ikkunan läpi.
+
+
+
+## Ohjelmoi valosensori
+
+Laite voidaan nyt ohjelmoida käyttämään sisäänrakennettua valosensoria.
+
+### Tehtävä
+
+Ohjelmoi laite.
+
+1. Avaa yövaloprojekti VS Codessa, jonka loit tämän tehtävän aiemmassa osassa.
+
+1. Lisää seuraava rivi `setup`-funktion loppuun:
+
+ ```cpp
+ pinMode(WIO_LIGHT, INPUT);
+ ```
+
+ Tämä rivi määrittää sensorilaitteiston kanssa käytettävät pinnit.
+
+ `WIO_LIGHT`-pinni on GPIO-pinni, joka on yhdistetty sisäänrakennettuun valosensoriin. Tämä pinni on asetettu tilaan `INPUT`, mikä tarkoittaa, että se on yhdistetty sensoriin ja dataa luetaan tästä pinnistä.
+
+1. Poista `loop`-funktion sisältö.
+
+1. Lisää seuraava koodi nyt tyhjään `loop`-funktioon.
+
+ ```cpp
+ int light = analogRead(WIO_LIGHT);
+ Serial.print("Light value: ");
+ Serial.println(light);
+ ```
+
+ Tämä koodi lukee analogisen arvon `WIO_LIGHT`-pinnistä. Se lukee arvon välillä 0–1 023 sisäänrakennetusta valosensorista. Tämä arvo lähetetään sitten sarjaporttiin, jotta voit lukea sen Serial Monitorista, kun koodi on käynnissä. `Serial.print` kirjoittaa tekstin ilman rivinvaihtoa, joten jokainen rivi alkaa tekstillä `Light value:` ja päättyy varsinaiseen valoarvoon.
+
+1. Lisää pieni yhden sekunnin (1 000 ms) viive `loop`-funktion loppuun, koska valotasoja ei tarvitse tarkistaa jatkuvasti. Viive vähentää laitteen virrankulutusta.
+
+ ```cpp
+ delay(1000);
+ ```
+
+1. Kytke Wio Terminal uudelleen tietokoneeseesi ja lataa uusi koodi samalla tavalla kuin aiemmin.
+
+1. Avaa Serial Monitor. Valoarvot tulostuvat terminaaliin. Peitä ja paljasta Wio Terminalin takana oleva valosensori, ja arvot muuttuvat.
+
+ ```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
+ ```
+
+> 💁 Löydät tämän koodin [code-sensor/wio-terminal](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/wio-terminal) -kansiosta.
+
+😀 Sensorin lisääminen yövaloprojektiisi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/4-connect-internet/README.md b/translations/fi/1-getting-started/lessons/4-connect-internet/README.md
new file mode 100644
index 00000000..65d5399e
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/4-connect-internet/README.md
@@ -0,0 +1,466 @@
+
+# Yhdistä laitteesi Internetiin
+
+
+
+> Sketchnote: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+Tämä oppitunti oli osa [Hello IoT -sarjaa](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) [Microsoft Reactorilta](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn). Oppitunti koostui kahdesta videosta: tunnin mittaisesta oppitunnista ja tunnin mittaisesta toimistotunnista, jossa syvennyttiin oppitunnin osiin ja vastattiin kysymyksiin.
+
+[](https://youtu.be/O4dd172mZhs)
+
+[](https://youtu.be/j-cVCzRDE2Q)
+
+> 🎥 Klikkaa yllä olevia kuvia katsoaksesi videot
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/7)
+
+## Johdanto
+
+IoT:n **I** tarkoittaa **Internet**iä – pilviyhteyksiä ja palveluita, jotka mahdollistavat monia IoT-laitteiden ominaisuuksia, kuten antureiden keräämien mittausten vastaanottamisen ja viestien lähettämisen toimilaitteiden ohjaamiseksi. IoT-laitteet yhdistyvät tyypillisesti yhteen pilvipalveluun käyttäen standardoitua viestintäprotokollaa, ja tämä palvelu yhdistyy muuhun IoT-sovellukseesi, kuten tekoälypalveluihin, jotka tekevät älykkäitä päätöksiä datan perusteella, tai verkkosovelluksiin ohjausta tai raportointia varten.
+
+> 🎓 Antureiden keräämää ja pilveen lähetettyä dataa kutsutaan telemetriaksi.
+
+IoT-laitteet voivat vastaanottaa viestejä pilvestä. Usein viestit sisältävät komentoja – ohjeita suorittaa toiminto joko sisäisesti (kuten uudelleenkäynnistys tai laiteohjelmiston päivitys) tai toimilaitteen avulla (kuten valon sytyttäminen).
+
+Tässä oppitunnissa esitellään joitakin viestintäprotokollia, joita IoT-laitteet voivat käyttää pilveen yhdistämiseen, sekä datatyyppejä, joita ne voivat lähettää tai vastaanottaa. Pääset myös käytännössä kokeilemaan näitä, lisäten internet-ohjauksen yövaloon ja siirtäen LED-ohjauslogiikan paikallisesti pyörivään "palvelin"-koodiin.
+
+Tässä oppitunnissa käsitellään:
+
+* [Viestintäprotokollat](../../../../../1-getting-started/lessons/4-connect-internet)
+* [Message Queueing Telemetry Transport (MQTT)](../../../../../1-getting-started/lessons/4-connect-internet)
+* [Telemetria](../../../../../1-getting-started/lessons/4-connect-internet)
+* [Komennot](../../../../../1-getting-started/lessons/4-connect-internet)
+
+## Viestintäprotokollat
+
+IoT-laitteiden ja Internetin väliseen viestintään on useita suosittuja protokollia. Suosituimmat perustuvat julkaisu/tilaus-malliin jonkinlaisen välittäjän kautta. IoT-laitteet yhdistyvät välittäjään ja julkaisevat telemetriaa sekä tilaavat komentoja. Pilvipalvelut yhdistyvät myös välittäjään, tilaavat kaikki telemetriaviestit ja julkaisevat komentoja joko tiettyihin laitteisiin tai laitejoukkoihin.
+
+
+
+MQTT on suosituin viestintäprotokolla IoT-laitteille, ja se käsitellään tässä oppitunnissa. Muita protokollia ovat AMQP ja HTTP/HTTPS.
+
+## Message Queueing Telemetry Transport (MQTT)
+
+[MQTT](http://mqtt.org) on kevyt, avoin standardi viestintäprotokolla, joka voi lähettää viestejä laitteiden välillä. Se suunniteltiin vuonna 1999 öljyputkien valvontaan, ja IBM julkaisi sen avoimena standardina 15 vuotta myöhemmin.
+
+MQTT:ssä on yksi välittäjä ja useita asiakkaita. Kaikki asiakkaat yhdistyvät välittäjään, ja välittäjä ohjaa viestit oikeille asiakkaille. Viestit ohjataan nimettyjen aiheiden avulla, eikä niitä lähetetä suoraan yksittäiselle asiakkaalle. Asiakas voi julkaista aiheeseen, ja kaikki asiakkaat, jotka tilaavat kyseisen aiheen, saavat viestin.
+
+
+
+✅ Tee tutkimusta. Jos sinulla on paljon IoT-laitteita, miten voit varmistaa, että MQTT-välittäjäsi pystyy käsittelemään kaikki viestit?
+
+### Yhdistä IoT-laitteesi MQTT:hen
+
+Ensimmäinen askel yövalon internet-ohjauksen lisäämisessä on sen yhdistäminen MQTT-välittäjään.
+
+#### Tehtävä
+
+Yhdistä laitteesi MQTT-välittäjään.
+
+Tässä oppitunnin osassa yhdistät IoT-yövalosi internetiin, jotta sitä voidaan ohjata etänä. Myöhemmin tässä oppitunnissa IoT-laitteesi lähettää telemetriaviestin MQTT:n kautta julkiseen MQTT-välittäjään, jossa se vastaanotetaan palvelinkoodilla, jonka kirjoitat. Tämä koodi tarkistaa valotason ja lähettää komento-viestin takaisin laitteelle, kehottaen sitä sytyttämään tai sammuttamaan LEDin.
+
+Todellisessa käyttötilanteessa tällainen järjestely voisi kerätä dataa useista valotunnistimista ennen kuin päätetään sytyttää valot paikassa, jossa on paljon valoja, kuten stadionilla. Tämä voisi estää valojen sytyttämisen, jos vain yksi tunnistin on pilvien tai linnun peitossa, mutta muut tunnistimet havaitsevat riittävästi valoa.
+
+✅ Mitkä muut tilanteet vaatisivat datan arviointia useista tunnistimista ennen komentojen lähettämistä?
+
+Sen sijaan, että käsittelisit MQTT-välittäjän asettamisen monimutkaisuuksia osana tätä tehtävää, voit käyttää julkista testipalvelinta, joka käyttää [Eclipse Mosquittoa](https://www.mosquitto.org), avointa MQTT-välittäjää. Tämä testivälittäjä on julkisesti saatavilla osoitteessa [test.mosquitto.org](https://test.mosquitto.org), eikä vaadi tilin luomista, mikä tekee siitä erinomaisen työkalun MQTT-asiakkaiden ja -palvelimien testaamiseen.
+
+> 💁 Tämä testivälittäjä on julkinen ja ei-suojattu. Kuka tahansa voi kuunnella, mitä julkaiset, joten sitä ei pitäisi käyttää yksityistä dataa sisältävien viestien kanssa.
+
+
+
+Seuraa alla olevaa ohjetta yhdistääksesi laitteesi MQTT-välittäjään:
+
+* [Arduino - Wio Terminal](wio-terminal-mqtt.md)
+* [Yksikorttitietokone - Raspberry Pi/virtuaalinen IoT-laite](single-board-computer-mqtt.md)
+
+### Syvällisempi katsaus MQTT:hen
+
+Aiheilla voi olla hierarkia, ja asiakkaat voivat tilata hierarkian eri tasoja käyttämällä jokerimerkkejä. Esimerkiksi voit lähettää lämpötilatelemetriaa `/telemetry/temperature`-aiheeseen ja kosteustelemetriaa `/telemetry/humidity`-aiheeseen, ja pilvisovelluksessasi tilata `/telemetry/*`-aiheen vastaanottaaksesi sekä lämpötila- että kosteustelemetriaviestit.
+
+Viestit voidaan lähettää palvelutason (QoS) kanssa, joka määrittää viestin vastaanottamisen takuun.
+
+* Korkeintaan kerran – viesti lähetetään vain kerran, eikä asiakas ja välittäjä tee lisätoimenpiteitä toimituksen vahvistamiseksi (lähetä ja unohda).
+* Vähintään kerran – viestiä yritetään lähettää useita kertoja, kunnes vahvistus vastaanotetaan (vahvistettu toimitus).
+* Täsmälleen kerran – lähettäjä ja vastaanottaja suorittavat kaksitasoisen käsittelyn varmistaakseen, että vain yksi kopio viestistä vastaanotetaan (varmistettu toimitus).
+
+✅ Mitkä tilanteet saattaisivat vaatia varmistettua toimitusviestiä verrattuna lähetä ja unohda -viestiin?
+
+Vaikka nimi on Message Queueing (MQTT:n alkukirjaimet), se ei itse asiassa tue viestijonoja. Tämä tarkoittaa, että jos asiakas katkaisee yhteyden ja yhdistää uudelleen, se ei saa viestejä, jotka lähetettiin katkoksen aikana, paitsi ne viestit, jotka se oli jo aloittanut käsittelemään QoS-prosessin avulla. Viesteillä voi olla säilytysmerkki asetettuna. Jos tämä on asetettu, MQTT-välittäjä tallentaa viimeisen viestin, joka on lähetetty aiheeseen tämän merkin kanssa, ja lähettää sen kaikille asiakkaille, jotka myöhemmin tilaavat aiheen. Näin asiakkaat saavat aina viimeisimmän viestin.
+
+MQTT tukee myös keep alive -toimintoa, joka tarkistaa, onko yhteys edelleen aktiivinen pitkien viestivälien aikana.
+
+> 🦟 [Mosquitto Eclipse Foundationilta](https://mosquitto.org) tarjoaa ilmaisen MQTT-välittäjän, jonka voit itse ajaa kokeillaksesi MQTT:tä, sekä julkisen MQTT-välittäjän, jota voit käyttää koodisi testaamiseen, osoitteessa [test.mosquitto.org](https://test.mosquitto.org).
+
+MQTT-yhteydet voivat olla julkisia ja avoimia, tai salattuja ja suojattuja käyttäjätunnusten ja salasanojen tai sertifikaattien avulla.
+
+> 💁 MQTT kommunikoi TCP/IP:n kautta, samaa verkon perusprotokollaa kuin HTTP, mutta eri portissa. Voit myös käyttää MQTT:tä websocketsin kautta kommunikoidaksesi verkkosovellusten kanssa, jotka toimivat selaimessa, tai tilanteissa, joissa palomuurit tai muut verkon säännöt estävät tavalliset MQTT-yhteydet.
+
+## Telemetria
+
+Sana telemetria tulee kreikan juurista, jotka tarkoittavat etämittausta. Telemetria tarkoittaa datan keräämistä antureista ja sen lähettämistä pilveen.
+
+> 💁 Yksi varhaisimmista telemetrialaitteista keksittiin Ranskassa vuonna 1874, ja se lähetti reaaliaikaisia sää- ja lumensyvyystietoja Mont Blancilta Pariisiin. Se käytti fyysisiä johtoja, koska langattomat teknologiat eivät olleet tuolloin saatavilla.
+
+Palataanpa esimerkkiin älytermostaatista oppitunnista 1.
+
+
+
+Termostaatilla on lämpötila-anturit telemetrian keräämiseen. Sillä olisi todennäköisesti yksi sisäänrakennettu lämpötila-anturi, ja se saattaisi yhdistyä useisiin ulkoisiin lämpötila-antureihin langattoman protokollan, kuten [Bluetooth Low Energy](https://wikipedia.org/wiki/Bluetooth_Low_Energy) (BLE), kautta.
+
+Esimerkki telemetriadatasta, jonka se voisi lähettää, voisi olla:
+
+| Nimi | Arvo | Kuvaus |
+| ---- | ----- | ----------- |
+| `thermostat_temperature` | 18°C | Termostaatin sisäänrakennetun lämpötila-anturin mittaama lämpötila |
+| `livingroom_temperature` | 19°C | Etäanturin mittaama lämpötila, joka on nimetty `livingroom` huoneen tunnistamiseksi |
+| `bedroom_temperature` | 21°C | Etäanturin mittaama lämpötila, joka on nimetty `bedroom` huoneen tunnistamiseksi |
+
+Pilvipalvelu voi sitten käyttää tätä telemetriadataa päätösten tekemiseen lämmityksen ohjaamiseen liittyen.
+
+### Lähetä telemetriaa IoT-laitteestasi
+
+Seuraava askel yövalon internet-ohjauksen lisäämisessä on valotason telemetrian lähettäminen MQTT-välittäjään telemetria-aiheessa.
+
+#### Tehtävä - lähetä telemetriaa IoT-laitteestasi
+
+Lähetä valotason telemetriaa MQTT-välittäjään.
+
+Data lähetetään JSON-muodossa – lyhenne sanoista JavaScript Object Notation, standardi datan tekstimuotoiselle koodaukselle avain/arvo-pareina.
+
+✅ Jos et ole aiemmin törmännyt JSON:iin, voit oppia lisää siitä [JSON.org-dokumentaatiosta](https://www.json.org/).
+
+Seuraa alla olevaa ohjetta lähettääksesi telemetriaa laitteestasi MQTT-välittäjään:
+
+* [Arduino - Wio Terminal](wio-terminal-telemetry.md)
+* [Yksikorttitietokone - Raspberry Pi/virtuaalinen IoT-laite](single-board-computer-telemetry.md)
+
+### Vastaanota telemetriaa MQTT-välittäjältä
+
+Telemetrian lähettämisessä ei ole järkeä, jos kukaan ei kuuntele sitä. Valotason telemetria tarvitsee jonkun kuuntelemaan sitä datan käsittelemiseksi. Tämä "palvelin"-koodi on tyyppistä koodia, jonka voit ottaa käyttöön pilvipalvelussa osana laajempaa IoT-sovellusta, mutta tässä aiot ajaa tämän koodin paikallisesti tietokoneellasi (tai Pi:lläsi, jos koodaat suoraan siellä). Palvelinkoodi koostuu Python-sovelluksesta, joka kuuntelee telemetriaviestejä MQTT:n kautta valotasoilla. Myöhemmin tässä oppitunnissa saat sen vastaamaan komento-viestillä, jossa on ohjeet LEDin sytyttämiseen tai sammuttamiseen.
+
+✅ Tee tutkimusta: Mitä tapahtuu MQTT-viesteille, jos kukaan ei kuuntele niitä?
+
+#### Asenna Python ja VS Code
+
+Jos sinulla ei ole Pythonia ja VS Codea asennettuna paikallisesti, sinun täytyy asentaa ne molemmat palvelinkoodin kirjoittamista varten. Jos käytät virtuaalista IoT-laitetta tai työskentelet Raspberry Pi:llä, voit ohittaa tämän vaiheen, sillä ne pitäisi olla jo asennettu ja konfiguroitu.
+
+##### Tehtävä - asenna Python ja VS Code
+
+Asenna Python ja VS Code.
+
+1. Asenna Python. Katso [Pythonin lataussivulta](https://www.python.org/downloads/) ohjeet uusimman Python-version asentamiseen.
+
+1. Asenna Visual Studio Code (VS Code). Tämä on editori, jota käytät virtuaalisen laitteen koodin kirjoittamiseen Pythonilla. Katso [VS Code -dokumentaatiosta](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) ohjeet VS Coden asentamiseen.
+💁 Voit vapaasti käyttää mitä tahansa Python IDE:tä tai editoria näiden oppituntien aikana, jos sinulla on suosikkityökalu, mutta oppitunnit antavat ohjeita perustuen VS Codeen.
+1. Asenna VS Code Pylance -laajennus. Tämä on VS Code -laajennus, joka tarjoaa Python-kielituen. Katso [Pylance-laajennuksen dokumentaatio](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) saadaksesi ohjeet laajennuksen asentamiseen VS Codeen.
+
+#### Määritä Python-virtuaaliympäristö
+
+Yksi Pythonin tehokkaista ominaisuuksista on mahdollisuus asentaa [pip-paketteja](https://pypi.org) - nämä ovat muiden ihmisten kirjoittamia ja Internetiin julkaistuja koodipaketteja. Voit asentaa pip-paketin tietokoneellesi yhdellä komennolla ja käyttää sitä sitten koodissasi. Käytät pipiä MQTT-yhteyden muodostamiseen tarvittavan paketin asentamiseen.
+
+Oletuksena, kun asennat paketin, se on käytettävissä kaikkialla tietokoneellasi, mikä voi johtaa ongelmiin pakettiversioiden kanssa - esimerkiksi yksi sovellus voi riippua tietystä pakettiversiosta, joka ei toimi, kun asennat uuden version toista sovellusta varten. Tämän ongelman kiertämiseksi voit käyttää [Python-virtuaaliympäristöä](https://docs.python.org/3/library/venv.html), joka on käytännössä Pythonin kopio omassa kansiossaan. Kun asennat pip-paketteja, ne asennetaan vain kyseiseen kansioon.
+
+##### Tehtävä - määritä Python-virtuaaliympäristö
+
+Määritä Python-virtuaaliympäristö ja asenna MQTT-pip-paketit.
+
+1. Avaa terminaali tai komentorivi ja suorita seuraavat komennot haluamassasi sijainnissa uuden hakemiston luomiseksi ja siihen siirtymiseksi:
+
+ ```sh
+ mkdir nightlight-server
+ cd nightlight-server
+ ```
+
+1. Suorita seuraava komento virtuaaliympäristön luomiseksi `.venv`-kansioon:
+
+ ```sh
+ python3 -m venv .venv
+ ```
+
+ > 💁 Sinun täytyy kutsua `python3` nimenomaisesti virtuaaliympäristön luomiseksi, jos sinulla on Python 2 asennettuna Python 3:n lisäksi (uusin versio). Jos Python 2 on asennettuna, `python` käyttää Python 2:ta Python 3:n sijaan.
+
+1. Aktivoi virtuaaliympäristö:
+
+ * Windowsissa:
+ * Jos käytät Command Promptia tai Windows Terminalin kautta Command Promptia, suorita:
+
+ ```cmd
+ .venv\Scripts\activate.bat
+ ```
+
+ * Jos käytät PowerShelliä, suorita:
+
+ ```powershell
+ .\.venv\Scripts\Activate.ps1
+ ```
+
+ * macOS:ssä tai Linuxissa suorita:
+
+ ```cmd
+ source ./.venv/bin/activate
+ ```
+
+ > 💁 Nämä komennot tulee suorittaa samasta sijainnista, jossa loit virtuaaliympäristön. Sinun ei koskaan tarvitse siirtyä `.venv`-kansioon, vaan sinun tulee aina suorittaa aktivointikomento ja kaikki komennot pakettien asentamiseksi tai koodin suorittamiseksi kansiosta, jossa olit virtuaaliympäristön luomisen aikana.
+
+1. Kun virtuaaliympäristö on aktivoitu, oletus `python`-komento suorittaa sen Python-version, jota käytettiin virtuaaliympäristön luomiseen. Suorita seuraava komento version tarkistamiseksi:
+
+ ```sh
+ python --version
+ ```
+
+ Tuloste näyttää suunnilleen tältä:
+
+ ```output
+ (.venv) ➜ nightlight-server python --version
+ Python 3.9.1
+ ```
+
+ > 💁 Python-versiosi voi olla erilainen - kunhan se on versio 3.6 tai uudempi, olet hyvässä tilanteessa. Jos ei, poista tämä kansio, asenna uudempi Python-versio ja yritä uudelleen.
+
+1. Suorita seuraavat komennot [Paho-MQTT](https://pypi.org/project/paho-mqtt/)-pip-paketin asentamiseksi, joka on suosittu MQTT-kirjasto.
+
+ ```sh
+ pip install paho-mqtt
+ ```
+
+ Tämä pip-paketti asennetaan vain virtuaaliympäristöön eikä ole käytettävissä sen ulkopuolella.
+
+#### Kirjoita palvelinkoodi
+
+Palvelinkoodi voidaan nyt kirjoittaa Pythonilla.
+
+##### Tehtävä - kirjoita palvelinkoodi
+
+Kirjoita palvelinkoodi.
+
+1. Suorita terminaalissa tai komentorivillä seuraava komento virtuaaliympäristön sisällä Python-tiedoston `app.py` luomiseksi:
+
+ * Windowsissa suorita:
+
+ ```cmd
+ type nul > app.py
+ ```
+
+ * macOS:ssä tai Linuxissa suorita:
+
+ ```cmd
+ touch app.py
+ ```
+
+1. Avaa nykyinen kansio VS Codessa:
+
+ ```sh
+ code .
+ ```
+
+1. Kun VS Code käynnistyy, se aktivoi Python-virtuaaliympäristön. Tämä näkyy alareunan tilapalkissa:
+
+ 
+
+1. Jos VS Code -terminaali on jo käynnissä, kun VS Code käynnistyy, virtuaaliympäristö ei ole aktivoituna siinä. Helpoin tapa korjata tämä on sulkea terminaali käyttämällä **Sulje aktiivinen terminaali**-painiketta:
+
+ 
+
+1. Käynnistä uusi VS Code -terminaali valitsemalla *Terminal -> New Terminal* tai painamalla `` CTRL+` ``. Uusi terminaali lataa virtuaaliympäristön, ja aktivointikutsu näkyy terminaalissa. Virtuaaliympäristön nimi (`.venv`) näkyy myös kehotteessa:
+
+ ```output
+ ➜ nightlight-server source .venv/bin/activate
+ (.venv) ➜ nightlight
+ ```
+
+1. Avaa `app.py`-tiedosto VS Code -tiedostoselaimesta ja lisää seuraava koodi:
+
+ ```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)
+ ```
+
+ Korvaa `` rivillä 6 ainutlaatuisella tunnuksella, jota käytit luodessasi laitekoodiasi.
+
+ ⚠️ Tämä **täytyy** olla sama tunnus, jota käytit laitteessasi, muuten palvelinkoodi ei tilaa tai julkaise oikeaan aiheeseen.
+
+ Tämä koodi luo MQTT-asiakkaan ainutlaatuisella nimellä ja yhdistää sen *test.mosquitto.org*-välittäjään. Se käynnistää käsittelysilmukan, joka toimii taustasäikeessä kuunnellen viestejä kaikista tilatuista aiheista.
+
+ Asiakas tilaa viestit telemetria-aiheesta ja määrittää funktion, joka kutsutaan, kun viesti vastaanotetaan. Kun telemetriaviesti vastaanotetaan, `handle_telemetry`-funktio kutsutaan, ja vastaanotettu viesti tulostetaan konsoliin.
+
+ Lopuksi ääretön silmukka pitää sovelluksen käynnissä. MQTT-asiakas kuuntelee viestejä taustasäikeessä ja toimii koko ajan, kun pääsovellus on käynnissä.
+
+1. Suorita VS Code -terminaalista seuraava komento Python-sovelluksesi suorittamiseksi:
+
+ ```sh
+ python app.py
+ ```
+
+ Sovellus alkaa kuunnella IoT-laitteelta tulevia viestejä.
+
+1. Varmista, että laitteesi on käynnissä ja lähettää telemetriaviestejä. Säädä fyysisen tai virtuaalisen laitteen havaitsemia valotasoja. Vastaanotetut viestit tulostetaan terminaaliin.
+
+ ```output
+ (.venv) ➜ nightlight-server python app.py
+ Message received: {'light': 0}
+ Message received: {'light': 400}
+ ```
+
+ Nightlight-virtuaaliympäristön `app.py`-tiedoston täytyy olla käynnissä, jotta nightlight-server-virtuaaliympäristön `app.py`-tiedosto voi vastaanottaa lähetetyt viestit.
+
+> 💁 Löydät tämän koodin [code-server/server](../../../../../1-getting-started/lessons/4-connect-internet/code-server/server)-kansiosta.
+
+### Kuinka usein telemetriaa tulisi lähettää?
+
+Yksi tärkeä telemetriaan liittyvä kysymys on, kuinka usein dataa tulisi mitata ja lähettää? Vastaus on - se riippuu. Jos mittaat usein, voit reagoida nopeammin muutoksiin, mutta käytät enemmän virtaa, kaistanleveyttä, tuotat enemmän dataa ja tarvitset enemmän pilviresursseja sen käsittelyyn. Sinun täytyy mitata tarpeeksi usein, mutta ei liian usein.
+
+Termostaatille mittaaminen muutaman minuutin välein on todennäköisesti enemmän kuin tarpeeksi, koska lämpötilat eivät muutu niin usein. Jos mittaat vain kerran päivässä, saatat päätyä lämmittämään taloa yöaikojen lämpötilojen mukaan keskellä aurinkoista päivää, kun taas jos mittaat joka sekunti, saat tuhansia tarpeettomasti toistettuja lämpötilamittauksia, jotka syövät käyttäjän Internet-nopeutta ja kaistanleveyttä (ongelma ihmisille, joilla on rajoitetut kaistanleveyssuunnitelmat), käyttävät enemmän virtaa, mikä voi olla ongelma akkukäyttöisille laitteille, kuten etäantureille, ja lisäävät pilvipalveluntarjoajan laskentaresurssien kustannuksia niiden käsittelyyn ja tallentamiseen.
+
+Jos valvot tehdaskoneen dataa, jonka vikaantuminen voisi aiheuttaa katastrofaalisia vahinkoja ja miljoonien dollarien menetettyjä tuloja, mittaaminen useita kertoja sekunnissa saattaa olla tarpeen. On parempi tuhlata kaistanleveyttä kuin jättää huomaamatta telemetria, joka osoittaa, että kone täytyy pysäyttää ja korjata ennen kuin se rikkoutuu.
+
+> 💁 Tässä tilanteessa kannattaa harkita reunalaitteen käyttöä telemetrian käsittelyyn ensin, jotta riippuvuus Internetistä vähenee.
+
+### Yhteyden katkeaminen
+
+Internet-yhteydet voivat olla epäluotettavia, ja katkoksia esiintyy usein. Mitä IoT-laitteen tulisi tehdä tällaisessa tilanteessa - pitäisikö sen menettää data vai tallentaa se, kunnes yhteys palautuu? Taas kerran, vastaus on se riippuu.
+
+Termostaatille data voidaan todennäköisesti menettää heti, kun uusi lämpötilamittaus on tehty. Lämmitysjärjestelmää ei kiinnosta, että 20 minuuttia sitten lämpötila oli 20,5°C, jos lämpötila on nyt 19°C - nykyinen lämpötila määrittää, pitäisikö lämmitys olla päällä vai ei.
+
+Koneille data kannattaa ehkä säilyttää, erityisesti jos sitä käytetään trendien etsimiseen. On olemassa koneoppimismalleja, jotka voivat havaita poikkeavuuksia datavirroissa tarkastelemalla tietyn ajanjakson (kuten viimeisen tunnin) dataa ja havaitsemalla poikkeavaa dataa. Tätä käytetään usein ennakoivassa huollossa, etsimällä merkkejä siitä, että jokin saattaa rikkoutua pian, jotta voit korjata tai vaihtaa sen ennen kuin se tapahtuu. Saatat haluta, että kaikki koneen telemetria lähetetään, jotta se voidaan käsitellä poikkeavuuksien havaitsemiseksi, joten kun IoT-laite voi muodostaa yhteyden uudelleen, se lähettää kaikki Internet-katkoksen aikana tuotetut telemetriat.
+
+IoT-laitteiden suunnittelijoiden tulisi myös harkita, voiko IoT-laite toimia Internet-katkoksen tai sijainnin aiheuttaman signaalin menetyksen aikana. Älykäs termostaatti pitäisi pystyä tekemään joitakin rajoitettuja päätöksiä lämmityksen ohjaamiseksi, jos se ei voi lähettää telemetriaa pilveen katkoksen vuoksi.
+
+[](https://twitter.com/internetofshit/status/1315736960082808832)
+
+MQTT:n käsitelläkseen yhteyden katkeamista laitteen ja palvelinkoodin täytyy huolehtia viestien toimituksesta, jos se on tarpeen, esimerkiksi vaatimalla, että kaikki lähetetyt viestit saavat vastauksen lisäviesteillä vastausaiheessa, ja jos eivät, ne jonotetaan manuaalisesti toistettavaksi myöhemmin.
+
+## Komennot
+
+Komennot ovat viestejä, jotka pilvi lähettää laitteelle, ohjeistaen sitä tekemään jotain. Useimmiten tämä tarkoittaa jonkinlaista ulostuloa aktuaattorin kautta, mutta se voi olla ohje laitteelle itselleen, kuten uudelleenkäynnistys tai lisätelemetrian kerääminen ja palauttaminen vastauksena komentoon.
+
+
+
+Termostaatti voisi vastaanottaa pilvestä komennon kytkeä lämmitys päälle. Kaikkien antureiden telemetriatietojen perusteella pilvipalvelu on päättänyt, että lämmitys pitäisi olla päällä, joten se lähettää asiaankuuluvan komennon.
+
+### Lähetä komentoja MQTT-välittäjälle
+
+Seuraava askel Internet-ohjatulle yövalolle on, että palvelinkoodi lähettää komennon takaisin IoT-laitteelle ohjatakseen valoa sen havaitsemien valotasojen perusteella.
+
+1. Avaa palvelinkoodi VS Codessa
+
+1. Lisää seuraava rivi `client_telemetry_topic`-määrittelyn jälkeen määrittääksesi, mihin aiheeseen komennot lähetetään:
+
+ ```python
+ server_command_topic = id + '/commands'
+ ```
+
+1. Lisää seuraava koodi `handle_telemetry`-funktion loppuun:
+
+ ```python
+ command = { 'led_on' : payload['light'] < 300 }
+ print("Sending message:", command)
+
+ client.publish(server_command_topic, json.dumps(command))
+ ```
+
+ Tämä lähettää JSON-viestin komentoaiheeseen, jossa `led_on`-arvo asetetaan joko trueksi tai falseksi riippuen siitä, onko valo alle 300 vai ei. Jos valo on alle 300, true lähetetään ohjeistamaan laitetta kytkemään LED päälle.
+
+1. Suorita koodi kuten aiemmin
+
+1. Säädä fyysisen tai virtuaalisen laitteen havaitsemia valotasoja. Vastaanotetut viestit ja lähetetyt komennot kirjoitetaan terminaaliin:
+
+ ```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}
+ ```
+
+> 💁 Telemetria ja komennot lähetetään yksittäisellä aiheella. Tämä tarkoittaa, että telemetria useilta laitteilta näkyy samalla telemetria-aiheella, ja komennot useille laitteille näkyvät samalla komentoaiheella. Jos haluaisit lähettää komennon tietylle laitteelle, voisit käyttää useita aiheita, nimettyjä ainutlaatuisella laitetunnuksella, kuten `/commands/device1`, `/commands/device2`. Näin laite voi kuunnella viestejä, jotka on tarkoitettu vain sille yhdelle laitteelle.
+
+> 💁 Löydät tämän koodin [code-commands/server](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/server)-kansiosta.
+
+### Käsittele komentoja IoT-laitteessa
+
+Nyt kun komentoja lähetetään palvelimelta, voit lisätä koodia IoT-laitteeseen niiden käsittelemiseksi ja LED:n ohjaamiseksi.
+
+Seuraa alla olevaa ohjetta kuunnellaksesi komentoja MQTT-välittäjältä:
+
+* [Arduino - Wio Terminal](wio-terminal-commands.md)
+* [Yksikorttitietokone - Raspberry Pi/virtuaalinen IoT-laite](single-board-computer-commands.md)
+
+Kun tämä koodi on kirjoitettu ja käynnissä, kokeile valotasojen muuttamista. Katso palvelimen ja laitteen tulosteet ja katso LED:n toimintaa, kun muutat valotasoja.
+
+### Yhteyden katkeaminen
+
+Mitä pilvipalvelun tulisi tehdä, jos sen täytyy lähettää komento IoT-laitteelle, joka on offline-tilassa? Taas kerran, vastaus on se riippuu.
+
+Jos uusin komento korvaa aiemman, aiemmat voidaan todennäköisesti jättää huomiotta. Jos pilvipalvelu lähettää komennon kytkeä lämmitys päälle ja sitten komennon kytkeä se pois päältä, päälle-komento voidaan jättää huomiotta eikä lähettää uudelleen.
+
+Jos komennot täytyy käsitellä järjestyksessä, kuten robotin käsivarren siirtäminen ylös ja sitten tarttujan sulkeminen, ne täytyy lähettää järjestyksessä, kun yhteys palautuu.
+
+✅ Kuinka laite- tai palvelinkoodi voisi varmistaa, että komennot lähetetään ja käsitellään aina järjestyksessä MQTT:n kautta, jos se on tarpeen?
+
+---
+
+## 🚀 Haaste
+
+Viimeisten kolmen oppitunnin haasteena oli listata mahdollisimman monta IoT-laitetta, jotka ovat kotonasi, koulussasi tai työpaikallasi, ja päättää, onko ne rakennettu mikro-ohjaimien vai yksikorttitietokoneiden ympärille, vai jopa näiden yhdistelmään, ja miettiä, mitä antureita ja aktuaattoreita ne käyttävät.
+Mieti näiden laitteiden kohdalla, millaisia viestejä ne saattavat lähettää tai vastaanottaa. Mitä telemetriatietoja ne lähettävät? Millaisia viestejä tai komentoja ne saattavat vastaanottaa? Uskotko, että ne ovat turvallisia?
+
+## Luentojälkeinen kysely
+
+[Luentojälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/8)
+
+## Kertaus ja itseopiskelu
+
+Lue lisää MQTT:stä [MQTT:n Wikipedia-sivulta](https://wikipedia.org/wiki/MQTT).
+
+Kokeile itse käynnistää MQTT-välityspalvelin käyttämällä [Mosquittoa](https://www.mosquitto.org) ja yhdistä siihen IoT-laitteesi ja palvelinkoodisi avulla.
+
+> 💁 Vinkki - Mosquitto ei oletuksena salli anonyymejä yhteyksiä (eli yhteyksiä ilman käyttäjätunnusta ja salasanaa), eikä salli yhteyksiä tietokoneen ulkopuolelta, jossa se toimii.
+> Voit korjata tämän käyttämällä [`mosquitto.conf`-asetustiedostoa](https://www.mosquitto.org/man/mosquitto-conf-5.html), jossa on seuraavat asetukset:
+>
+> ```sh
+> listener 1883 0.0.0.0
+> allow_anonymous true
+> ```
+
+## Tehtävä
+
+[Vertaile MQTT:tä muihin viestintäprotokolliin](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/4-connect-internet/assignment.md b/translations/fi/1-getting-started/lessons/4-connect-internet/assignment.md
new file mode 100644
index 00000000..f6cb5c65
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/4-connect-internet/assignment.md
@@ -0,0 +1,28 @@
+
+# Vertaa ja vertaile MQTT:tä muihin viestintäprotokolliin
+
+## Ohjeet
+
+Tässä oppitunnissa käsiteltiin MQTT:tä viestintäprotokollana. On olemassa myös muita, kuten AMQP ja HTTP/HTTPS.
+
+Tutki näitä molempia ja vertaa niitä MQTT:hen. Pohdi energiankulutusta, turvallisuutta ja viestien säilyvyyttä, jos yhteydet katkeavat.
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan |
+| -------- | ----------- | -------- | -------------------- |
+| AMQP:n vertailu MQTT:hen | Osaa vertailla ja erotella AMQP:n ja MQTT:n ja käsittelee energiankulutusta, turvallisuutta ja viestien säilyvyyttä. | Osaa osittain vertailla ja erotella AMQP:n ja MQTT:n ja käsittelee kaksi kolmesta: energiankulutusta, turvallisuutta ja viestien säilyvyyttä. | Osaa osittain vertailla ja erotella AMQP:n ja MQTT:n ja käsittelee yhden kolmesta: energiankulutusta, turvallisuutta ja viestien säilyvyyttä. |
+| HTTP/HTTPS:n vertailu MQTT:hen | Osaa vertailla ja erotella HTTP/HTTPS:n ja MQTT:n ja käsittelee energiankulutusta, turvallisuutta ja viestien säilyvyyttä. | Osaa osittain vertailla ja erotella HTTP/HTTPS:n ja MQTT:n ja käsittelee kaksi kolmesta: energiankulutusta, turvallisuutta ja viestien säilyvyyttä. | Osaa osittain vertailla ja erotella HTTP/HTTPS:n ja MQTT:n ja käsittelee yhden kolmesta: energiankulutusta, turvallisuutta ja viestien säilyvyyttä. |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md b/translations/fi/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md
new file mode 100644
index 00000000..1fd1d3a6
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md
@@ -0,0 +1,67 @@
+
+# Hallitse yövaloa Internetin kautta - Virtuaalinen IoT-laitteisto ja Raspberry Pi
+
+Tässä oppitunnin osassa tilaat komentoja, jotka lähetetään MQTT-välityspalvelimelta Raspberry Pi -laitteeseesi tai virtuaaliseen IoT-laitteeseesi.
+
+## Tilaa komennot
+
+Seuraava vaihe on tilata MQTT-välityspalvelimelta lähetetyt komennot ja vastata niihin.
+
+### Tehtävä
+
+Tilaa komennot.
+
+1. Avaa yövaloprojekti VS Codessa.
+
+1. Jos käytät virtuaalista IoT-laitetta, varmista, että terminaali käyttää virtuaaliympäristöä. Jos käytät Raspberry Pi -laitetta, et käytä virtuaaliympäristöä.
+
+1. Lisää seuraava koodi `client_telemetry_topic`-määrittelyjen jälkeen:
+
+ ```python
+ server_command_topic = id + '/commands'
+ ```
+
+ `server_command_topic` on MQTT-aihe, johon laite tilaa vastaanottaakseen LED-komentoja.
+
+1. Lisää seuraava koodi pääsilmukan yläpuolelle, `mqtt_client.loop_start()`-rivin jälkeen:
+
+ ```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
+ ```
+
+ Tämä koodi määrittelee funktion `handle_command`, joka lukee viestin JSON-dokumenttina ja etsii `led_on`-ominaisuuden arvon. Jos arvo on `True`, LED sytytetään, muuten se sammutetaan.
+
+ MQTT-asiakas tilaa aiheen, johon palvelin lähettää viestejä, ja asettaa `handle_command`-funktion kutsuttavaksi, kun viesti vastaanotetaan.
+
+ > 💁 `on_message`-käsittelijä kutsutaan kaikille tilatuille aiheille. Jos myöhemmin kirjoitat koodia, joka kuuntelee useita aiheita, voit saada aiheen, johon viesti lähetettiin, `message`-objektista, joka välitetään käsittelijäfunktiolle.
+
+1. Suorita koodi samalla tavalla kuin suoritat koodin tehtävän aiemmassa osassa. Jos käytät virtuaalista IoT-laitetta, varmista, että CounterFit-sovellus on käynnissä ja että valosensori ja LED on luotu oikeille pinneille.
+
+1. Säädä fyysisen tai virtuaalisen laitteen havaitsemia valotasoja. Vastaanotetut viestit ja lähetetyt komennot kirjoitetaan terminaaliin. LED syttyy ja sammuu valotason mukaan.
+
+> 💁 Löydät tämän koodin [code-commands/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/virtual-device)-kansiosta tai [code-commands/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/pi)-kansiosta.
+
+😀 Olet onnistuneesti ohjelmoinut laitteesi vastaamaan MQTT-välityspalvelimen komentoihin.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md b/translations/fi/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md
new file mode 100644
index 00000000..0acd527a
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md
@@ -0,0 +1,93 @@
+
+# Ohjaa yövaloa Internetin kautta - Virtuaalinen IoT-laitteisto ja Raspberry Pi
+
+IoT-laitteen täytyy olla ohjelmoitu kommunikoimaan *test.mosquitto.org*-palvelimen kanssa käyttäen MQTT-protokollaa, jotta se voi lähettää telemetriatietoja valosensorin lukemista ja vastaanottaa komentoja LED-valon ohjaamiseen.
+
+Tässä oppitunnin osassa yhdistät Raspberry Pi -laitteesi tai virtuaalisen IoT-laitteesi MQTT-välityspalvelimeen.
+
+## Asenna MQTT-asiakasohjelman paketti
+
+Jotta voit kommunikoida MQTT-välityspalvelimen kanssa, sinun täytyy asentaa MQTT-kirjaston pip-paketti joko Pi-laitteellesi tai virtuaaliseen ympäristöön, jos käytät virtuaalista laitetta.
+
+### Tehtävä
+
+Asenna pip-paketti
+
+1. Avaa yövaloprojekti VS Code -ohjelmassa.
+
+1. Jos käytät virtuaalista IoT-laitetta, varmista, että terminaali käyttää virtuaalista ympäristöä. Jos käytät Raspberry Pi -laitetta, et käytä virtuaalista ympäristöä.
+
+1. Suorita seuraava komento asentaaksesi MQTT-pip-paketin:
+
+ ```sh
+ pip3 install paho-mqtt
+ ```
+
+## Ohjelmoi laite
+
+Laite on valmis ohjelmoitavaksi.
+
+### Tehtävä
+
+Kirjoita laitteen koodi.
+
+1. Lisää seuraava tuonti `app.py`-tiedoston alkuun:
+
+ ```python
+ import paho.mqtt.client as mqtt
+ ```
+
+ `paho.mqtt.client`-kirjasto mahdollistaa sovelluksesi kommunikoimisen MQTT:n kautta.
+
+1. Lisää seuraava koodi valosensorin ja LED-valon määrittelyjen jälkeen:
+
+ ```python
+ id = ''
+
+ client_name = id + 'nightlight_client'
+ ```
+
+ Korvaa `` ainutlaatuisella tunnisteella, jota käytetään tämän laitteen asiakasohjelman nimenä ja myöhemmin aiheissa, joita tämä laite julkaisee ja tilaa. *test.mosquitto.org*-välityspalvelin on julkinen ja sitä käyttää moni, mukaan lukien muut opiskelijat, jotka työskentelevät tämän tehtävän parissa. Ainutlaatuinen MQTT-asiakasohjelman nimi ja aiheiden nimet varmistavat, ettei koodisi aiheuta ristiriitoja muiden kanssa. Tarvitset myös tämän tunnisteen, kun luot palvelinkoodin myöhemmin tässä tehtävässä.
+
+ > 💁 Voit käyttää verkkosivustoa kuten [GUIDGen](https://www.guidgen.com) luodaksesi ainutlaatuisen tunnisteen.
+
+ `client_name` on ainutlaatuinen nimi tälle MQTT-asiakasohjelmalle välityspalvelimessa.
+
+1. Lisää seuraava koodi tämän uuden koodin alle luodaksesi MQTT-asiakasohjelmaobjektin ja yhdistääksesi MQTT-välityspalvelimeen:
+
+ ```python
+ mqtt_client = mqtt.Client(client_name)
+ mqtt_client.connect('test.mosquitto.org')
+
+ mqtt_client.loop_start()
+
+ print("MQTT connected!")
+ ```
+
+ Tämä koodi luo asiakasobjektin, yhdistää julkiseen MQTT-välityspalvelimeen ja käynnistää käsittelysilmukan, joka pyörii taustasäikeessä kuunnellen viestejä kaikista tilatuista aiheista.
+
+1. Suorita koodi samalla tavalla kuin suoritat koodin edellisessä tehtävän osassa. Jos käytät virtuaalista IoT-laitetta, varmista, että CounterFit-sovellus on käynnissä ja valosensori sekä LED-valo on luotu oikeille pinneille.
+
+ ```output
+ (.venv) ➜ nightlight python app.py
+ MQTT connected!
+ Light level: 0
+ Light level: 0
+ ```
+
+> 💁 Löydät tämän koodin [code-mqtt/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/virtual-device)-kansiosta tai [code-mqtt/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/pi)-kansiosta.
+
+😀 Olet onnistuneesti yhdistänyt laitteesi MQTT-välityspalvelimeen.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md b/translations/fi/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md
new file mode 100644
index 00000000..6b32d5f4
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md
@@ -0,0 +1,74 @@
+
+# Hallitse yövaloa Internetin kautta - Virtuaalinen IoT-laitteisto ja Raspberry Pi
+
+Tässä oppitunnin osassa lähetät telemetriatietoja valotasoista Raspberry Pi -laitteeltasi tai virtuaaliselta IoT-laitteeltasi MQTT-välityspalvelimelle.
+
+## Telemetrian julkaiseminen
+
+Seuraava vaihe on luoda JSON-dokumentti telemetriatiedoista ja lähettää se MQTT-välityspalvelimelle.
+
+### Tehtävä
+
+Julkaise telemetria MQTT-välityspalvelimelle.
+
+1. Avaa yövaloprojekti VS Code -sovelluksessa.
+
+1. Jos käytät virtuaalista IoT-laitetta, varmista, että terminaali käyttää virtuaaliympäristöä. Jos käytät Raspberry Pi:tä, et käytä virtuaaliympäristöä.
+
+1. Lisää seuraava tuonti `app.py`-tiedoston alkuun:
+
+ ```python
+ import json
+ ```
+
+ `json`-kirjastoa käytetään telemetriatietojen koodaamiseen JSON-dokumentiksi.
+
+1. Lisää seuraava `client_name`-määrittelyn jälkeen:
+
+ ```python
+ client_telemetry_topic = id + '/telemetry'
+ ```
+
+ `client_telemetry_topic` on MQTT-aihe, johon laite julkaisee valotasot.
+
+1. Korvaa tiedoston lopussa olevan `while True:` -silmukan sisältö seuraavalla:
+
+ ```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)
+ ```
+
+ Tämä koodi pakkaa valotason JSON-dokumentiksi ja julkaisee sen MQTT-välityspalvelimelle. Sen jälkeen se odottaa hetken vähentääkseen viestien lähetysfrekvenssiä.
+
+1. Suorita koodi samalla tavalla kuin edellisen tehtävän osan koodi. Jos käytät virtuaalista IoT-laitetta, varmista, että CounterFit-sovellus on käynnissä ja että valosensori ja LED on luotu oikeille pinneille.
+
+ ```output
+ (.venv) ➜ nightlight python app.py
+ MQTT connected!
+ Sending telemetry {"light": 0}
+ Sending telemetry {"light": 0}
+ ```
+
+> 💁 Löydät tämän koodin [code-telemetry/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/virtual-device) -kansiosta tai [code-telemetry/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/pi) -kansiosta.
+
+😀 Olet onnistuneesti lähettänyt telemetriatietoja laitteeltasi.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md b/translations/fi/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md
new file mode 100644
index 00000000..18657fc6
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md
@@ -0,0 +1,93 @@
+
+# Ohjaa yövaloa Internetin kautta - Wio Terminal
+
+Tässä osassa oppituntia tilaat komentoja, jotka lähetetään MQTT-välittäjältä Wio Terminal -laitteellesi.
+
+## Tilaa komennot
+
+Seuraava vaihe on tilata MQTT-välittäjän lähettämät komennot ja vastata niihin.
+
+### Tehtävä
+
+Tilaa komennot.
+
+1. Avaa yövaloprojekti VS Code -ohjelmassa.
+
+1. Lisää seuraava koodi `config.h`-tiedoston loppuun määrittääksesi komentojen aiheen nimen:
+
+ ```cpp
+ const string SERVER_COMMAND_TOPIC = ID + "/commands";
+ ```
+
+ `SERVER_COMMAND_TOPIC` on aihe, johon laite tilaa saadakseen LED-komennot.
+
+1. Lisää seuraava rivi `reconnectMQTTClient`-funktion loppuun, jotta komentoaihe tilataan, kun MQTT-asiakas yhdistetään uudelleen:
+
+ ```cpp
+ client.subscribe(SERVER_COMMAND_TOPIC.c_str());
+ ```
+
+1. Lisää seuraava koodi `reconnectMQTTClient`-funktion alapuolelle.
+
+ ```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);
+ }
+ ```
+
+ Tämä funktio toimii palautteena, jonka MQTT-asiakas kutsuu, kun se vastaanottaa viestin palvelimelta.
+
+ Viesti vastaanotetaan 8-bittisten kokonaislukujen taulukkona, joten se täytyy muuntaa merkkitaulukoksi, jotta sitä voidaan käsitellä tekstinä.
+
+ Viesti sisältää JSON-dokumentin, joka dekoodataan ArduinoJson-kirjaston avulla. JSON-dokumentin `led_on`-ominaisuus luetaan, ja sen arvon perusteella LED sytytetään tai sammutetaan.
+
+1. Lisää seuraava koodi `createMQTTClient`-funktioon:
+
+ ```cpp
+ client.setCallback(clientCallback);
+ ```
+
+ Tämä koodi asettaa `clientCallback`-funktion palautteeksi, joka kutsutaan, kun MQTT-välittäjältä vastaanotetaan viesti.
+
+ > 💁 `clientCallback`-käsittelijä kutsutaan kaikille tilatuille aiheille. Jos myöhemmin kirjoitat koodia, joka kuuntelee useita aiheita, voit saada aiheen, johon viesti lähetettiin, `topic`-parametrista, joka välitetään palautefunktiolle.
+
+1. Lataa koodi Wio Terminal -laitteellesi ja käytä sarjamonitoria nähdäksesi valotasot, jotka lähetetään MQTT-välittäjälle.
+
+1. Säädä fyysisen tai virtuaalisen laitteen havaitsemia valotasoja. Näet viestien vastaanottamisen ja komentojen lähettämisen terminaalissa. Näet myös LEDin syttyvän ja sammuvan valotason mukaan.
+
+> 💁 Löydät tämän koodin [code-commands/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/wio-terminal) -kansiosta.
+
+😀 Olet onnistuneesti ohjelmoinut laitteesi vastaamaan MQTT-välittäjän komentoihin.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md b/translations/fi/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md
new file mode 100644
index 00000000..b3e7b671
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md
@@ -0,0 +1,249 @@
+
+# Hallitse yövaloa Internetin kautta - Wio Terminal
+
+IoT-laitteelle täytyy ohjelmoida kyky kommunikoida *test.mosquitto.org*-palvelimen kanssa käyttämällä MQTT-protokollaa. Tämän avulla se voi lähettää telemetriatietoja valosensorin lukemista ja vastaanottaa komentoja LED-valon ohjaamiseen.
+
+Tässä oppitunnin osassa yhdistät Wio Terminalin MQTT-välityspalvelimeen.
+
+## Asenna WiFi- ja MQTT-kirjastot Arduinoa varten
+
+Jotta voit kommunikoida MQTT-välityspalvelimen kanssa, sinun täytyy asentaa joitakin Arduino-kirjastoja, jotka mahdollistavat Wio Terminalin WiFi-sirun käytön ja MQTT-yhteyden. Arduino-laitteille kehittäessäsi voit hyödyntää laajaa valikoimaa avoimen lähdekoodin kirjastoja, jotka tarjoavat monenlaisia toiminnallisuuksia. Seeed julkaisee kirjastoja Wio Terminalille, jotka mahdollistavat WiFi-yhteyden. Lisäksi muut kehittäjät ovat julkaisseet kirjastoja MQTT-välityspalvelimien kanssa kommunikointiin, ja käytät näitä kirjastoja laitteesi kanssa.
+
+Nämä kirjastot toimitetaan lähdekoodina, joka voidaan tuoda automaattisesti PlatformIO:hon ja kääntää laitteellesi. Näin Arduino-kirjastot toimivat kaikilla laitteilla, jotka tukevat Arduino-kehystä, edellyttäen, että laitteessa on kyseisen kirjaston vaatima laitteisto. Jotkin kirjastot, kuten Seeedin WiFi-kirjastot, ovat laitteistokohtaisia.
+
+Kirjastot voidaan asentaa joko globaalisti tai tiettyyn projektiin. Tässä tehtävässä kirjastot asennetaan projektiin.
+
+✅ Voit oppia lisää kirjastojen hallinnasta ja niiden löytämisestä ja asentamisesta [PlatformIO:n kirjasto-dokumentaatiosta](https://docs.platformio.org/en/latest/librarymanager/index.html).
+
+### Tehtävä - WiFi- ja MQTT-kirjastojen asentaminen
+
+Asenna Arduino-kirjastot.
+
+1. Avaa yövaloprojekti VS Codessa.
+
+1. Lisää seuraava `platformio.ini`-tiedoston loppuun:
+
+ ```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
+ ```
+
+ Tämä tuo Seeedin WiFi-kirjastot. `@ `-syntaksi viittaa tiettyyn kirjaston versioon.
+
+ > 💁 Voit poistaa `@ `-osan käyttääksesi aina kirjastojen uusinta versiota, mutta ei ole takeita, että uudemmat versiot toimivat alla olevan koodin kanssa. Tämä koodi on testattu näiden kirjastoversioiden kanssa.
+
+ Tämä riittää kirjastojen lisäämiseen. Seuraavan kerran, kun PlatformIO rakentaa projektin, se lataa näiden kirjastojen lähdekoodin ja kääntää sen osaksi projektiasi.
+
+1. Lisää seuraava `lib_deps`-osioon:
+
+ ```ini
+ knolleary/PubSubClient @ 2.8
+ ```
+
+ Tämä tuo [PubSubClient](https://github.com/knolleary/pubsubclient)-kirjaston, joka on Arduino MQTT -asiakas.
+
+## Yhdistä WiFi-verkkoon
+
+Nyt Wio Terminal voidaan yhdistää WiFi-verkkoon.
+
+### Tehtävä - yhdistä WiFi-verkkoon
+
+Yhdistä Wio Terminal WiFi-verkkoon.
+
+1. Luo uusi tiedosto `src`-kansioon nimeltä `config.h`. Voit tehdä tämän valitsemalla `src`-kansion tai sen sisällä olevan `main.cpp`-tiedoston ja napsauttamalla **Uusi tiedosto** -painiketta resurssienhallinnassa. Tämä painike näkyy vain, kun hiiren osoitin on resurssienhallinnan päällä.
+
+ 
+
+1. Lisää tähän tiedostoon seuraava koodi määrittääksesi WiFi-tunnistetietojen vakioarvot:
+
+ ```cpp
+ #pragma once
+
+ #include
+
+ using namespace std;
+
+ // WiFi credentials
+ const char *SSID = "";
+ const char *PASSWORD = "";
+ ```
+
+ Korvaa `` WiFi-verkkosi SSID:llä. Korvaa `` WiFi-verkkosi salasanalla.
+
+1. Avaa `main.cpp`-tiedosto.
+
+1. Lisää seuraavat `#include`-direktiivit tiedoston alkuun:
+
+ ```cpp
+ #include
+ #include
+ #include
+
+ #include "config.h"
+ ```
+
+ Tämä tuo mukaan aiemmin lisäämiesi kirjastojen otsikkotiedostot sekä config-otsikkotiedoston. Nämä otsikkotiedostot ovat tarpeen, jotta PlatformIO tuo kirjastojen koodin mukaan. Ilman näiden otsikkotiedostojen eksplisiittistä sisällyttämistä osa koodista ei käänny, ja saat kääntäjävirheitä.
+
+1. Lisää seuraava koodi `setup`-funktion yläpuolelle:
+
+ ```cpp
+ void connectWiFi()
+ {
+ while (WiFi.status() != WL_CONNECTED)
+ {
+ Serial.println("Connecting to WiFi..");
+ WiFi.begin(SSID, PASSWORD);
+ delay(500);
+ }
+
+ Serial.println("Connected!");
+ }
+ ```
+
+ Tämä koodi yrittää yhdistää laitetta WiFi-verkkoon, kunnes yhteys on muodostettu, käyttäen config-otsikkotiedostosta saatuja SSID- ja salasana-arvoja.
+
+1. Lisää kutsu tähän funktioon `setup`-funktion loppuun, kun pinnit on konfiguroitu.
+
+ ```cpp
+ connectWiFi();
+ ```
+
+1. Lataa tämä koodi laitteellesi tarkistaaksesi, että WiFi-yhteys toimii. Näet tämän sarjamonitorissa.
+
+ ```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!
+ ```
+
+## Yhdistä MQTT:hen
+
+Kun Wio Terminal on yhdistetty WiFi-verkkoon, se voi yhdistyä MQTT-välityspalvelimeen.
+
+### Tehtävä - yhdistä MQTT:hen
+
+Yhdistä MQTT-välityspalvelimeen.
+
+1. Lisää seuraava koodi `config.h`-tiedoston loppuun määrittääksesi MQTT-välityspalvelimen yhteystiedot:
+
+ ```cpp
+ // MQTT settings
+ const string ID = "";
+
+ const string BROKER = "test.mosquitto.org";
+ const string CLIENT_NAME = ID + "nightlight_client";
+ ```
+
+ Korvaa `` ainutlaatuisella tunnisteella, jota käytetään tämän laitteen asiakasnimenä ja myöhemmin aiheissa, joihin tämä laite julkaisee ja tilaa. *test.mosquitto.org*-välityspalvelin on julkinen ja monien ihmisten, mukaan lukien muiden tämän tehtävän parissa työskentelevien opiskelijoiden, käytössä. Ainutlaatuisen MQTT-asiakasnimen ja aiheiden avulla varmistat, ettei koodisi mene sekaisin muiden kanssa. Tarvitset myös tämän tunnisteen, kun luot palvelinkoodia myöhemmin tässä tehtävässä.
+
+ > 💁 Voit käyttää verkkosivustoa, kuten [GUIDGen](https://www.guidgen.com), luodaksesi ainutlaatuisen tunnisteen.
+
+ `BROKER` on MQTT-välityspalvelimen URL-osoite.
+
+ `CLIENT_NAME` on tämän MQTT-asiakkaan ainutlaatuinen nimi välityspalvelimessa.
+
+1. Avaa `main.cpp`-tiedosto ja lisää seuraava koodi `connectWiFi`-funktion alapuolelle ja `setup`-funktion yläpuolelle:
+
+ ```cpp
+ WiFiClient wioClient;
+ PubSubClient client(wioClient);
+ ```
+
+ Tämä koodi luo WiFi-asiakkaan Wio Terminalin WiFi-kirjastoja käyttäen ja käyttää sitä MQTT-asiakkaan luomiseen.
+
+1. Lisää tämän koodin alapuolelle seuraava:
+
+ ```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);
+ }
+ }
+ }
+ ```
+
+ Tämä funktio testaa yhteyden MQTT-välityspalvelimeen ja yhdistää uudelleen, jos yhteyttä ei ole. Se yrittää yhdistää uudelleen 5 sekunnin välein, jos yhteys epäonnistuu.
+
+1. Lisää seuraava koodi `reconnectMQTTClient`-funktion alapuolelle:
+
+ ```cpp
+ void createMQTTClient()
+ {
+ client.setServer(BROKER.c_str(), 1883);
+ reconnectMQTTClient();
+ }
+ ```
+
+ Tämä koodi määrittää MQTT-välityspalvelimen asiakkaalle sekä asettaa takaisinsoiton, kun viesti vastaanotetaan. Se yrittää myös yhdistää välityspalvelimeen.
+
+1. Kutsu `createMQTTClient`-funktiota `setup`-funktiossa sen jälkeen, kun WiFi-yhteys on muodostettu.
+
+1. Korvaa koko `loop`-funktio seuraavalla:
+
+ ```cpp
+ void loop()
+ {
+ reconnectMQTTClient();
+ client.loop();
+
+ delay(2000);
+ }
+ ```
+
+ Tämä koodi aloittaa tarkistamalla ja tarvittaessa yhdistämällä uudelleen MQTT-välityspalvelimeen. Nämä yhteydet voivat katketa helposti, joten on hyvä tarkistaa ja yhdistää säännöllisesti. Sen jälkeen se kutsuu MQTT-asiakkaan `loop`-metodia käsitelläkseen mahdolliset saapuvat viestit tilatuista aiheista. Tämä sovellus on yksisäikeinen, joten viestejä ei voida vastaanottaa taustasäikeessä, ja pääsäikeellä täytyy varata aikaa odottavien viestien käsittelyyn.
+
+ Lopuksi 2 sekunnin viive varmistaa, että valotasotietoja ei lähetetä liian usein, mikä vähentää laitteen virrankulutusta.
+
+1. Lataa koodi Wio Terminalillesi ja käytä sarjamonitoria nähdäksesi laitteen yhdistyvän WiFi-verkkoon ja MQTT:hen.
+
+ ```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
+ ```
+
+> 💁 Löydät tämän koodin [code-mqtt/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/wio-terminal)-kansiosta.
+
+😀 Olet onnistuneesti yhdistänyt laitteesi MQTT-välityspalvelimeen.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md b/translations/fi/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md
new file mode 100644
index 00000000..7f2a6e38
--- /dev/null
+++ b/translations/fi/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md
@@ -0,0 +1,93 @@
+
+# Hallitse yövaloa Internetin kautta - Wio Terminal
+
+Tässä osassa oppituntia lähetät telemetriatietoja valotasoista Wio Terminal -laitteestasi MQTT-välityspalvelimelle.
+
+## Asenna JSON Arduino -kirjastot
+
+Yksi suosittu tapa lähettää viestejä MQTT:n kautta on käyttää JSON-muotoa. Arduino tarjoaa JSON-kirjaston, joka helpottaa JSON-dokumenttien lukemista ja kirjoittamista.
+
+### Tehtävä
+
+Asenna Arduino JSON -kirjasto.
+
+1. Avaa yövaloprojekti VS Codessa.
+
+1. Lisää seuraava rivi `lib_deps`-listaan `platformio.ini`-tiedostossa:
+
+ ```ini
+ bblanchon/ArduinoJson @ 6.17.3
+ ```
+
+ Tämä tuo käyttöön [ArduinoJson](https://arduinojson.org)-kirjaston, joka on Arduino JSON -kirjasto.
+
+## Telemetrian julkaiseminen
+
+Seuraava vaihe on luoda JSON-dokumentti telemetriatiedoista ja lähettää se MQTT-välityspalvelimelle.
+
+### Tehtävä - telemetrian julkaiseminen
+
+Julkaise telemetria MQTT-välityspalvelimelle.
+
+1. Lisää seuraava koodi `config.h`-tiedoston loppuun määrittääksesi telemetria-aiheen nimen MQTT-välityspalvelimelle:
+
+ ```cpp
+ const string CLIENT_TELEMETRY_TOPIC = ID + "/telemetry";
+ ```
+
+ `CLIENT_TELEMETRY_TOPIC` on aihe, johon laite julkaisee valotasotiedot.
+
+1. Avaa `main.cpp`-tiedosto.
+
+1. Lisää seuraava `#include`-direktiivi tiedoston alkuun:
+
+ ```cpp
+ #include
+ ```
+
+1. Lisää seuraava koodi `loop`-funktion sisään, juuri ennen `delay`-komentoa:
+
+ ```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());
+ ```
+
+ Tämä koodi lukee valotason ja luo JSON-dokumentin, joka sisältää tämän tason käyttäen ArduinoJson-kirjastoa. JSON-dokumentti sarjoitetaan merkkijonoksi ja julkaistaan telemetria-MQTT-aiheeseen MQTT-asiakkaan avulla.
+
+1. Lataa koodi Wio Terminal -laitteeseesi ja käytä sarjamonitoria nähdäksesi, kuinka valotasot lähetetään MQTT-välityspalvelimelle.
+
+ ```output
+ Connecting to WiFi..
+ Connected!
+ Attempting MQTT connection...connected
+ Sending telemetry {"light":652}
+ Sending telemetry {"light":612}
+ Sending telemetry {"light":583}
+ ```
+
+> 💁 Löydät tämän koodin [code-telemetry/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/wio-terminal) -kansiosta.
+
+😀 Olet onnistuneesti lähettänyt telemetriatietoja laitteestasi.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/README.md b/translations/fi/2-farm/README.md
new file mode 100644
index 00000000..e46699f9
--- /dev/null
+++ b/translations/fi/2-farm/README.md
@@ -0,0 +1,34 @@
+
+# Maatalous IoT:n avulla
+
+Kun väestö kasvaa, myös maatalouden kysyntä kasvaa. Käytettävissä olevan maan määrä ei muutu, mutta ilmasto muuttuu – tuoden viljelijöille entistä enemmän haasteita, erityisesti 2 miljardille [omavaraisviljelijälle](https://wikipedia.org/wiki/Subsistence_agriculture), jotka ovat riippuvaisia siitä, mitä he kasvattavat syödäkseen ja ruokkien perheensä. IoT voi auttaa viljelijöitä tekemään älykkäämpiä päätöksiä siitä, mitä viljellä ja milloin korjata sato, lisäämään tuottavuutta, vähentämään manuaalisen työn määrää sekä havaitsemaan ja torjumaan tuholaisia.
+
+Näissä kuudessa oppitunnissa opit, kuinka voit hyödyntää esineiden internetiä parantaaksesi ja automatisoidaksesi maataloutta.
+
+> 💁 Näissä oppitunneissa käytetään joitakin pilvipalveluresursseja. Jos et suorita kaikkia tämän projektin oppitunteja, varmista, että [siivoat projektisi](../clean-up.md).
+
+## Aihealueet
+
+1. [Kasvien kasvun ennustaminen IoT:n avulla](lessons/1-predict-plant-growth/README.md)
+1. [Maan kosteuden havaitseminen](lessons/2-detect-soil-moisture/README.md)
+1. [Kasvien automaattinen kastelu](lessons/3-automated-plant-watering/README.md)
+1. [Kasvisi siirtäminen pilveen](lessons/4-migrate-your-plant-to-the-cloud/README.md)
+1. [Sovelluslogiikan siirtäminen pilveen](lessons/5-migrate-application-to-the-cloud/README.md)
+1. [Pidä kasvisi turvassa](lessons/6-keep-your-plant-secure/README.md)
+
+## Tekijät
+
+Kaikki oppitunnit on kirjoitettu ♥️:lla [Jim Bennettin](https://GitHub.com/JimBobBennett) toimesta.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/1-predict-plant-growth/README.md b/translations/fi/2-farm/lessons/1-predict-plant-growth/README.md
new file mode 100644
index 00000000..b1b06934
--- /dev/null
+++ b/translations/fi/2-farm/lessons/1-predict-plant-growth/README.md
@@ -0,0 +1,284 @@
+
+## Ennusta kasvien kasvua IoT:n avulla
+
+
+
+> Sketchnote: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/9)
+
+## Johdanto
+
+Kasvit tarvitsevat tiettyjä asioita kasvaakseen - vettä, hiilidioksidia, ravinteita, valoa ja lämpöä. Tässä oppitunnissa opit laskemaan kasvien kasvun ja kypsymisen nopeutta mittaamalla ilman lämpötilaa.
+
+Tässä oppitunnissa käsitellään:
+
+* [Digitaalinen maatalous](../../../../../2-farm/lessons/1-predict-plant-growth)
+* [Miksi lämpötila on tärkeä viljelyssä?](../../../../../2-farm/lessons/1-predict-plant-growth)
+* [Mittaa ympäristön lämpötila](../../../../../2-farm/lessons/1-predict-plant-growth)
+* [Kasvupäivien asteet (GDD)](../../../../../2-farm/lessons/1-predict-plant-growth)
+* [Laske GDD lämpötila-anturin datan avulla](../../../../../2-farm/lessons/1-predict-plant-growth)
+
+## Digitaalinen maatalous
+
+Digitaalinen maatalous muuttaa viljelytapojamme, hyödyntäen työkaluja datan keräämiseen, tallentamiseen ja analysointiin. Olemme tällä hetkellä ajanjaksossa, jota Maailman talousfoorumi kutsuu "Neljänneksi teolliseksi vallankumoukseksi", ja digitaalisen maatalouden nousua on kutsuttu "Neljänneksi maatalousvallankumoukseksi" tai "Maatalous 4.0:ksi".
+
+> 🎓 Termi "Digitaalinen maatalous" kattaa myös koko "maatalouden arvoketjun", eli matkan pellolta pöytään. Se sisältää tuotteen laadun seurannan kuljetuksen ja prosessoinnin aikana, varastointi- ja verkkokauppajärjestelmät, jopa traktoreiden vuokraussovellukset!
+
+Nämä muutokset mahdollistavat viljelijöille suuremmat sadot, vähemmän lannoitteiden ja torjunta-aineiden käyttöä sekä tehokkaamman vedenkäytön. Vaikka näitä tekniikoita käytetään pääasiassa rikkaammissa maissa, anturit ja muut laitteet ovat hitaasti halventumassa, mikä tekee niistä saavutettavampia kehittyvissä maissa.
+
+Joidenkin digitaalisen maatalouden mahdollistamien tekniikoiden esimerkkejä:
+
+* Lämpötilan mittaus - lämpötilan mittaaminen auttaa viljelijöitä ennustamaan kasvien kasvua ja kypsymistä.
+* Automaattinen kastelu - maaperän kosteuden mittaaminen ja kastelujärjestelmien käynnistäminen, kun maaperä on liian kuiva, sen sijaan että kastelu tapahtuisi ajastetusti. Ajastettu kastelu voi johtaa siihen, että kasvit saavat liian vähän vettä kuumalla ja kuivalla säällä tai liikaa vettä sateen aikana. Kastelun optimointi maaperän tarpeiden mukaan auttaa viljelijöitä käyttämään vettä tehokkaammin.
+* Tuholaistorjunta - viljelijät voivat käyttää kameroita automatisoiduissa roboteissa tai droneissa tarkistaakseen tuholaisia ja levittää torjunta-aineita vain tarvittaviin paikkoihin, mikä vähentää torjunta-aineiden käyttöä ja niiden valumista paikallisiin vesistöihin.
+
+✅ Tee tutkimusta. Mitä muita tekniikoita käytetään viljelytuottojen parantamiseen?
+
+> 🎓 Termi "Tarkkuusmaatalous" tarkoittaa viljelykasvien tarkkailua, mittaamista ja niihin reagointia pelto- tai jopa osapeltotasolla. Tämä sisältää veden, ravinteiden ja tuholaisten määrän mittaamisen ja tarkat toimenpiteet, kuten kastelun vain pienelle osalle peltoa.
+
+## Miksi lämpötila on tärkeä viljelyssä?
+
+Kun opitaan kasveista, useimmat oppilaat saavat tietää veden, valon, hiilidioksidin ja ravinteiden tarpeellisuudesta. Kasvit tarvitsevat myös lämpöä kasvaakseen - siksi kasvit kukkivat keväällä lämpötilan noustessa, miksi lumikellot tai narsissit voivat puhjeta aikaisin lyhyen lämpimän jakson jälkeen, ja miksi kasvihuoneet ja lasihuoneet ovat niin hyviä kasvien kasvattamiseen.
+
+> 🎓 Kasvihuoneet ja lasihuoneet tekevät samanlaista työtä, mutta tärkeällä erolla. Kasvihuoneet lämmitetään keinotekoisesti, mikä mahdollistaa lämpötilan tarkemman hallinnan, kun taas lasihuoneet luottavat auringon lämpöön, ja niiden hallinta rajoittuu yleensä ikkunoihin tai muihin aukkoihin, joista lämpöä päästetään ulos.
+
+Kasveilla on perus- tai minimilämpötila, optimaalinen lämpötila ja maksimilämpötila, jotka kaikki perustuvat päivittäisiin keskilämpötiloihin.
+
+* Peruslämpötila - tämä on minimipäivittäinen keskilämpötila, joka tarvitaan kasvin kasvuun.
+* Optimaalinen lämpötila - tämä on paras päivittäinen keskilämpötila, joka tuottaa eniten kasvua.
+* Maksimilämpötila - tämä on korkein lämpötila, jonka kasvi kestää. Tämän yläpuolella kasvi lopettaa kasvunsa yrittäen säästää vettä ja pysyä hengissä.
+
+> 💁 Nämä ovat keskilämpötiloja, jotka on laskettu päivän ja yön lämpötilojen keskiarvona. Kasvit tarvitsevat myös erilaisia lämpötiloja päivällä ja yöllä, jotta ne voivat fotosyntetisoida tehokkaammin ja säästää energiaa yöllä.
+
+Jokaisella kasvilajilla on erilaiset arvot perus-, optimaalisen ja maksimilämpötilan osalta. Siksi jotkut kasvit menestyvät kuumissa maissa ja toiset kylmissä maissa.
+
+✅ Tee tutkimusta. Selvitä, mikä on peruslämpötila puutarhassasi, koulussasi tai paikallisessa puistossa oleville kasveille.
+
+
+
+Yllä oleva kaavio näyttää esimerkin kasvunopeuden ja lämpötilan välisestä suhteesta. Peruslämpötilaan asti ei ole kasvua. Kasvunopeus kasvaa optimaaliseen lämpötilaan asti ja laskee sen jälkeen. Maksimilämpötilassa kasvu pysähtyy.
+
+Tämän kaavion muoto vaihtelee kasvilajista toiseen. Joillakin kasveilla lasku optimaalisen lämpötilan jälkeen on jyrkempi, toisilla nousu peruslämpötilasta optimaaliseen on hitaampi.
+
+> 💁 Viljelijän on saatava selville kolme lämpötilaarvoa ja ymmärrettävä kaavion muoto kasvatettaville kasveilleen saadakseen parhaan kasvun.
+
+Jos viljelijä voi hallita lämpötilaa, esimerkiksi kaupallisessa kasvihuoneessa, hän voi optimoida kasvien kasvun. Esimerkiksi kaupallisessa kasvihuoneessa, jossa kasvatetaan tomaatteja, lämpötila asetetaan noin 25°C päivällä ja 20°C yöllä nopeimman kasvun saavuttamiseksi.
+
+> 🍅 Yhdistämällä nämä lämpötilat keinotekoiseen valaistukseen, lannoitteisiin ja hallittuihin hiilidioksiditasoihin kaupalliset viljelijät voivat kasvattaa ja korjata satoa ympäri vuoden.
+
+## Mittaa ympäristön lämpötila
+
+Lämpötila-antureita voidaan käyttää IoT-laitteiden kanssa ympäristön lämpötilan mittaamiseen.
+
+### Tehtävä - mittaa lämpötila
+
+Seuraa sopivaa opasta lämpötilan seuraamiseksi IoT-laitteellasi:
+
+* [Arduino - Wio Terminal](wio-terminal-temp.md)
+* [Yksikorttitietokone - Raspberry Pi](pi-temp.md)
+* [Yksikorttitietokone - Virtuaalinen laite](virtual-device-temp.md)
+
+## Kasvupäivien asteet
+
+Kasvupäivien asteet (tunnetaan myös nimellä kasvupäiväyksiköt) ovat tapa mitata kasvien kasvua lämpötilan perusteella. Olettaen, että kasvi saa riittävästi vettä, ravinteita ja hiilidioksidia, lämpötila määrittää kasvunopeuden.
+
+Kasvupäivien asteet, eli GDD, lasketaan päivittäin päivän keskilämpötilana, joka ylittää kasvin peruslämpötilan. Jokainen kasvi tarvitsee tietyn määrän GDD:tä kasvaakseen, kukkiakseen tai tuottaakseen ja kypsyäkseen sadon. Mitä enemmän GDD:tä päivässä, sitä nopeammin kasvi kasvaa.
+
+> 🇺🇸 Amerikkalaisille kasvupäivien asteet voidaan laskea myös Fahrenheit-asteina. 5 GDD (Celsius) vastaa 9 GDD (Fahrenheit).
+
+Täydellinen GDD-kaava on hieman monimutkainen, mutta yksinkertaistettu yhtälö on usein hyvä arvio:
+
+
+
+* **GDD** - tämä on kasvupäivien asteiden määrä
+* **T max** - tämä on päivän maksimilämpötila Celsius-asteina
+* **T min** - tämä on päivän minimilämpötila Celsius-asteina
+* **T base** - tämä on kasvin peruslämpötila Celsius-asteina
+
+> 💁 On olemassa muunnelmia, jotka käsittelevät T max yli 30°C tai T min alle T base, mutta jätämme nämä huomiotta tällä kertaa.
+
+### Esimerkki - Maissi 🌽
+
+Lajikkeesta riippuen maissi tarvitsee kypsyäkseen 800–2,700 GDD:tä, ja sen peruslämpötila on 10°C.
+
+Ensimmäisenä päivänä, jolloin lämpötila ylitti peruslämpötilan, mitattiin seuraavat lämpötilat:
+
+| Mittaus | Lämpötila °C |
+| :---------- | :----------: |
+| Maksimi | 16 |
+| Minimi | 12 |
+
+Kun nämä luvut syötetään laskentaan:
+
+* T max = 16
+* T min = 12
+* T base = 10
+
+Tämä antaa laskennan:
+
+
+
+Maissi sai 4 GDD:tä sinä päivänä. Oletetaan, että maissilajike tarvitsee kypsyäkseen 800 GDD:tä, jolloin se tarvitsee vielä 796 GDD:tä saavuttaakseen kypsyyden.
+
+✅ Tee tutkimusta. Selvitä, kuinka monta GDD:tä puutarhassasi, koulussasi tai paikallisessa puistossa olevat kasvit tarvitsevat kypsyäkseen tai tuottaakseen satoa.
+
+## Laske GDD lämpötila-anturin datan avulla
+
+Kasvit eivät kasva kiinteinä päivämäärinä - esimerkiksi et voi istuttaa siementä ja tietää, että kasvi tuottaa hedelmiä tarkalleen 100 päivää myöhemmin. Sen sijaan viljelijä voi saada karkean käsityksen siitä, kuinka kauan kasvi kestää kasvaa, ja tarkistaa päivittäin, milloin sato on valmis.
+
+Tällä on suuri työvoimavaikutus suurella tilalla, ja viljelijä voi missata sadon, joka on valmis odottamattoman aikaisin. Mittaamalla lämpötiloja viljelijä voi laskea kasvin saamat GDD:t, jolloin hänen tarvitsee tarkistaa vain lähellä odotettua kypsyyttä.
+
+Keräämällä lämpötiladataa IoT-laitteella viljelijä voi saada automaattisen ilmoituksen, kun kasvit ovat lähellä kypsyyttä. Tyypillinen arkkitehtuuri tähän on, että IoT-laitteet mittaavat lämpötilaa ja lähettävät tämän telemetriadatan Internetin kautta esimerkiksi MQTT:n avulla. Palvelinkoodi kuuntelee tätä dataa ja tallentaa sen jonnekin, kuten tietokantaan. Näin dataa voidaan analysoida myöhemmin, esimerkiksi yöllä tehtävässä työssä, jossa lasketaan päivän GDD:t, summataan kunkin sadon tähän mennessä saadut GDD:t ja ilmoitetaan, jos kasvi on lähellä kypsyyttä.
+
+
+
+Palvelinkoodi voi myös täydentää dataa lisäämällä lisätietoja. Esimerkiksi IoT-laite voi lähettää tunnisteen, joka kertoo, mikä laite on kyseessä, ja palvelinkoodi voi käyttää tätä tunnistetta laitteen sijainnin ja valvottavien kasvien selvittämiseen. Se voi myös lisätä perustietoja, kuten nykyisen ajan, koska jotkut IoT-laitteet eivät sisällä tarvittavaa laitteistoa tarkan ajan seuraamiseen tai vaativat lisäkoodia nykyisen ajan lukemiseen Internetistä.
+
+✅ Miksi luulet, että eri pelloilla voi olla eri lämpötiloja?
+
+### Tehtävä - julkaise lämpötilatiedot
+
+Seuraa sopivaa opasta julkaistaksesi lämpötiladataa MQTT:n kautta IoT-laitteellasi, jotta sitä voidaan analysoida myöhemmin:
+
+* [Arduino - Wio Terminal](wio-terminal-temp-publish.md)
+* [Yksikorttitietokone - Raspberry Pi/Virtuaalinen IoT-laite](single-board-computer-temp-publish.md)
+
+### Tehtävä - tallenna lämpötilatiedot
+
+Kun IoT-laite julkaisee telemetriaa, palvelinkoodi voidaan kirjoittaa tilaamaan tämä data ja tallentamaan se. Sen sijaan, että data tallennettaisiin tietokantaan, palvelinkoodi tallentaa sen pilkkueroteltuun CSV-tiedostoon. CSV-tiedostot tallentavat dataa riveinä tekstinä, jossa jokainen arvo erotetaan pilkulla ja jokainen tietue on uudella rivillä. Ne ovat kätevä, ihmisen luettavissa oleva ja hyvin tuettu tapa tallentaa dataa tiedostona.
+
+CSV-tiedostossa on kaksi saraketta - *päivämäärä* ja *lämpötila*. *Päivämäärä*-sarake asetetaan nykyiseksi päivämääräksi ja ajaksi, jolloin viesti vastaanotettiin palvelimella, ja *lämpötila* tulee telemetriaviestistä.
+
+1. Toista oppitunnin 4 vaiheet luodaksesi palvelinkoodin telemetrian tilaamiseen. Sinun ei tarvitse lisätä koodia komentojen julkaisemiseen.
+
+ Vaiheet tähän ovat:
+
+ * Määritä ja aktivoi Python-virtuaaliympäristö
+
+ * Asenna paho-mqtt pip-paketti
+
+ * Kirjoita koodi kuuntelemaan MQTT-viestejä, jotka julkaistaan telemetria-aiheessa
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin oppitunnissa 4 Python-sovelluksen luomiseksi telemetrian vastaanottamiseen](../../../1-getting-started/lessons/4-connect-internet/README.md#receive-telemetry-from-the-mqtt-broker).
+
+ Nimeä tämän projektin kansio `temperature-sensor-server`.
+
+1. Varmista, että `client_name` heijastaa tätä projektia:
+
+ ```cpp
+ client_name = id + 'temperature_sensor_server'
+ ```
+
+1. Lisää seuraavat tuonnit tiedoston alkuun, olemassa olevien tuontien alle:
+
+ ```python
+ from os import path
+ import csv
+ from datetime import datetime
+ ```
+
+ Tämä tuo kirjaston tiedostojen lukemiseen, kirjaston CSV-tiedostojen käsittelyyn ja kirjaston päivämäärien ja aikojen käsittelyyn.
+
+1. Lisää seuraava koodi ennen `handle_telemetry`-funktiota:
+
+ ```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()
+ ```
+
+ Tämä koodi määrittelee joitakin vakioita tiedoston nimeä ja CSV-tiedoston sarakeotsikoita varten. CSV-tiedoston ensimmäinen rivi sisältää perinteisesti sarakeotsikot pilkuilla eroteltuina.
+
+ Koodi tarkistaa sitten, onko CSV-tiedosto jo olemassa. Jos sitä ei ole, se luodaan sarakeotsikoilla ensimmäisellä rivillä.
+
+1. Lisää seuraava koodi `handle_telemetry`-funktion loppuun:
+
+ ```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']})
+ ```
+Tämä koodi avaa CSV-tiedoston ja lisää uuden rivin sen loppuun. Rivi sisältää nykyisen päivämäärän ja ajan ihmisen luettavassa muodossa, sekä IoT-laitteelta saadun lämpötilan. Tiedot tallennetaan [ISO 8601 -muodossa](https://wikipedia.org/wiki/ISO_8601) aikavyöhykkeen kanssa, mutta ilman mikrosekunteja.
+
+1. Suorita tämä koodi samalla tavalla kuin aiemmin, varmistaen, että IoT-laitteesi lähettää dataa. Kansiosta luodaan CSV-tiedosto nimeltä `temperature.csv`. Kun tarkastelet sitä, näet päivämäärät/ajat ja lämpötilamittaukset:
+
+ ```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. Suorita tätä koodia jonkin aikaa datan keräämiseksi. Ihanteellisesti sinun tulisi ajaa tätä koko päivän ajan kerätäksesi tarpeeksi dataa GDD-laskelmia varten.
+
+
+> 💁 Jos käytät virtuaalista IoT-laitetta, valitse satunnaisuus-valintaruutu ja aseta vaihteluväli välttääksesi saman lämpötilan saamisen joka kerta, kun lämpötila-arvo palautetaan.
+ 
+
+ > 💁 Jos haluat ajaa tätä koko päivän ajan, sinun täytyy varmistaa, että tietokone, jossa palvelinkoodisi pyörii, ei mene lepotilaan. Voit tehdä tämän muuttamalla virta-asetuksia tai käyttämällä esimerkiksi [tätä Python-skriptiä, joka pitää järjestelmän aktiivisena](https://github.com/jaqsparow/keep-system-active).
+
+> 💁 Löydät tämän koodin [code-server/temperature-sensor-server](../../../../../2-farm/lessons/1-predict-plant-growth/code-server/temperature-sensor-server) -kansiosta.
+
+### Tehtävä - laske GDD tallennettujen tietojen avulla
+
+Kun palvelin on kerännyt lämpötiladataa, kasvin GDD voidaan laskea.
+
+Manuaaliset vaiheet tähän ovat:
+
+1. Selvitä kasvin peruslämpötila. Esimerkiksi mansikoille peruslämpötila on 10°C.
+
+1. Etsi `temperature.csv`-tiedostosta päivän korkeimmat ja matalimmat lämpötilat.
+
+1. Käytä aiemmin annettua GDD-laskentakaavaa GDD:n laskemiseen.
+
+Esimerkiksi, jos päivän korkein lämpötila on 25°C ja matalin 12°C:
+
+
+
+* 25 + 12 = 37
+* 37 / 2 = 18.5
+* 18.5 - 10 = 8.5
+
+Näin ollen mansikat ovat saaneet **8.5** GDD:tä. Mansikat tarvitsevat noin 250 GDD:tä tuottaakseen hedelmiä, joten vielä on matkaa.
+
+---
+
+## 🚀 Haaste
+
+Kasvit tarvitsevat muutakin kuin lämpöä kasvaakseen. Mitä muita asioita tarvitaan?
+
+Näitä varten selvitä, onko olemassa sensoreita, jotka voivat mitata niitä. Entä aktuaattorit näiden tasojen hallintaan? Miten voisit yhdistää yhden tai useamman IoT-laitteen optimoidaksesi kasvien kasvua?
+
+## Luentojälkeinen kysely
+
+[Luentojälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/10)
+
+## Katsaus & Itseopiskelu
+
+* Lue lisää digitaalisesta maataloudesta [Digital Agriculture Wikipedia -sivulta](https://wikipedia.org/wiki/Digital_agriculture). Lue myös tarkkuusmaataloudesta [Precision Agriculture Wikipedia -sivulta](https://wikipedia.org/wiki/Precision_agriculture).
+* Täydellinen kasvupäivälaskenta on monimutkaisempi kuin tässä annettu yksinkertaistettu versio. Lue lisää monimutkaisemmasta yhtälöstä ja siitä, miten käsitellä lämpötiloja, jotka ovat peruslämpötilan alapuolella, [Growing Degree Day Wikipedia -sivulta](https://wikipedia.org/wiki/Growing_degree-day).
+* Ruoka voi olla tulevaisuudessa niukkaa, jos käytämme edelleen samoja viljelymenetelmiä. Opi lisää huipputeknologian viljelytekniikoista tässä [Hi-Tech Farms of Future -videossa YouTubessa](https://www.youtube.com/watch?v=KIEOuKD9KX8).
+
+## Tehtävä
+
+[Visualisoi GDD-data Jupyter Notebookilla](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/1-predict-plant-growth/assignment.md b/translations/fi/2-farm/lessons/1-predict-plant-growth/assignment.md
new file mode 100644
index 00000000..c9cd0a3a
--- /dev/null
+++ b/translations/fi/2-farm/lessons/1-predict-plant-growth/assignment.md
@@ -0,0 +1,57 @@
+
+# Visualisoi GDD-dataa Jupyter Notebookilla
+
+## Ohjeet
+
+Tässä osiossa keräsit GDD-dataa IoT-sensorin avulla. Hyvän GDD-datan saamiseksi sinun tulee kerätä dataa useamman päivän ajalta. Lämpötiladatan visualisointiin ja GDD:n laskemiseen voit käyttää työkaluja, kuten [Jupyter Notebooks](https://jupyter.org), datan analysointiin.
+
+Aloita keräämällä dataa muutaman päivän ajalta. Sinun tulee varmistaa, että palvelinkoodisi on käynnissä koko sen ajan, kun IoT-laitteesi on käynnissä. Tämä onnistuu esimerkiksi säätämällä virranhallinta-asetuksia tai käyttämällä [tällaista Python-skriptiä, joka pitää järjestelmän aktiivisena](https://github.com/jaqsparow/keep-system-active).
+
+Kun sinulla on lämpötiladataa, voit käyttää tämän repositorion Jupyter Notebookia sen visualisointiin ja GDD:n laskemiseen. Jupyter Notebookit yhdistävät koodia ja ohjeita *soluiksi* kutsutuissa lohkoissa, usein Python-koodia. Voit lukea ohjeet ja ajaa koodilohkot yksi kerrallaan. Voit myös muokata koodia. Tässä notebookissa voit esimerkiksi muokata peruslämpötilaa, jota käytetään GDD:n laskemiseen kasvillesi.
+
+1. Luo kansio nimeltä `gdd-calculation`
+
+1. Lataa [gdd.ipynb](./code-notebook/gdd.ipynb) -tiedosto ja kopioi se `gdd-calculation`-kansioon.
+
+1. Kopioi MQTT-palvelimen luoma `temperature.csv` -tiedosto
+
+1. Luo uusi Python-virtuaaliympäristö `gdd-calculation`-kansioon.
+
+1. Asenna pip-paketteja Jupyter Notebookeja varten sekä kirjastot datan hallintaan ja visualisointiin:
+
+ ```sh
+ pip install --upgrade pip
+ pip install pandas
+ pip install matplotlib
+ pip install jupyter
+ ```
+
+1. Aja notebook Jupyterissa:
+
+ ```sh
+ jupyter notebook gdd.ipynb
+ ```
+
+ Jupyter käynnistyy ja avaa notebookin selaimessasi. Käy läpi notebookin ohjeet visualisoidaksesi mitatut lämpötilat ja laskeaksesi kasvukauden astepäivät (GDD).
+
+ 
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannettavaa |
+| -------- | ----------- | -------- | ------------- |
+| Datan kerääminen | Kerää vähintään 2 päivän täydet datat | Kerää vähintään 1 päivän täydet datat | Kerää jonkin verran dataa |
+| GDD:n laskeminen | Ajaa notebookin onnistuneesti ja laskee GDD:n | Ajaa notebookin onnistuneesti | Ei pysty ajamaan notebookia |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä johtuvista väärinkäsityksistä tai virhetulkinnoista.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb b/translations/fi/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb
new file mode 100644
index 00000000..6fbc81bf
--- /dev/null
+++ b/translations/fi/2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb
@@ -0,0 +1,167 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Kasvukauden lämpösumma\n",
+ "\n",
+ "Tämä muistikirja lataa CSV-tiedostoon tallennetut lämpötilatiedot ja analysoi ne. Se piirtää lämpötilat, näyttää kunkin päivän korkeimman ja matalimman arvon sekä laskee kasvukauden lämpösumman (GDD).\n",
+ "\n",
+ "Tämän muistikirjan käyttö:\n",
+ "\n",
+ "* Kopioi `temperature.csv`-tiedosto samaan kansioon kuin tämä muistikirja\n",
+ "* Suorita kaikki solut käyttämällä **▶︎ Run**-painiketta yläpuolella. Tämä suorittaa valitun solun ja siirtyy seuraavaan.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Aseta alla olevassa solussa `base_temperature` kasvin peruslämpötilaksi.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "base_temperature = 10"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "CSV-tiedosto täytyy nyt ladata pandas-kirjaston avulla\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": [
+ "Kun tiedot on luettu, ne voidaan ryhmitellä `date`-sarakkeen mukaan, ja jokaiselle päivämäärälle voidaan poimia vähimmäis- ja enimmäislämpötilat.\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 voidaan laskea käyttämällä standardia GDD-yhtälöä\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**Vastuuvapauslauseke**: \nTämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.\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-27T23:06:02+00:00",
+ "source_file": "2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb",
+ "language_code": "fi"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/1-predict-plant-growth/pi-temp.md b/translations/fi/2-farm/lessons/1-predict-plant-growth/pi-temp.md
new file mode 100644
index 00000000..c9594c2f
--- /dev/null
+++ b/translations/fi/2-farm/lessons/1-predict-plant-growth/pi-temp.md
@@ -0,0 +1,125 @@
+
+# Mittaa lämpötila - Raspberry Pi
+
+Tässä oppitunnin osassa lisäät lämpötila-anturin Raspberry Pi:hin.
+
+## Laitteisto
+
+Anturi, jota käytät, on [DHT11 kosteus- ja lämpötila-anturi](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DHT11.html), joka yhdistää kaksi anturia yhteen pakettiin. Tämä on melko suosittu, ja markkinoilla on saatavilla useita antureita, jotka yhdistävät lämpötilan, kosteuden ja joskus myös ilmanpaineen. Lämpötila-anturikomponentti on negatiivisen lämpötilakertoimen (NTC) termistori, eli termistori, jonka vastus pienenee lämpötilan noustessa.
+
+Tämä on digitaalinen anturi, joten siinä on sisäänrakennettu ADC, joka luo digitaalisen signaalin sisältäen lämpötila- ja kosteustiedot, joita mikrokontrolleri voi lukea.
+
+### Yhdistä lämpötila-anturi
+
+Grove-lämpötila-anturi voidaan liittää Raspberry Pi:hin.
+
+#### Tehtävä
+
+Yhdistä lämpötila-anturi
+
+
+
+1. Työnnä Grove-kaapelin toinen pää kosteus- ja lämpötila-anturin liittimeen. Se menee sisään vain yhdellä tavalla.
+
+1. Kun Raspberry Pi on sammutettu, liitä Grove-kaapelin toinen pää digitaaliseen liittimeen, joka on merkitty **D5** Grove Base hatissa, joka on kiinnitetty Pi:hin. Tämä liitin on toinen vasemmalta rivissä, joka on GPIO-pinnien vieressä.
+
+
+
+## Ohjelmoi lämpötila-anturi
+
+Laite voidaan nyt ohjelmoida käyttämään liitettyä lämpötila-anturia.
+
+### Tehtävä
+
+Ohjelmoi laite.
+
+1. Käynnistä Pi ja odota sen käynnistymistä.
+
+1. Käynnistä VS Code joko suoraan Pi:ssä tai yhdistä Remote SSH -laajennuksen kautta.
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin VS Coden asennuksesta ja käynnistämisestä oppitunnissa 1](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md).
+
+1. Luo terminaalista uusi kansio `pi`-käyttäjän kotihakemistoon nimeltä `temperature-sensor`. Luo tähän kansioon tiedosto nimeltä `app.py`:
+
+ ```sh
+ mkdir temperature-sensor
+ cd temperature-sensor
+ touch app.py
+ ```
+
+1. Avaa tämä kansio VS Codessa.
+
+1. Lämpötila- ja kosteusanturin käyttämiseksi tarvitaan lisä-Pip-paketti. Asenna tämä Pip-paketti Pi:lle suorittamalla seuraava komento VS Coden terminaalista:
+
+ ```sh
+ pip3 install seeed-python-dht
+ ```
+
+1. Lisää seuraava koodi `app.py`-tiedostoon tarvittavien kirjastojen tuomiseksi:
+
+ ```python
+ import time
+ from seeed_dht import DHT
+ ```
+
+ `from seeed_dht import DHT` -lause tuo `DHT`-anturin luokan, joka mahdollistaa vuorovaikutuksen Grove-lämpötila-anturin kanssa `seeed_dht`-moduulista.
+
+1. Lisää seuraava koodi edellisen koodin jälkeen luodaksesi instanssin luokasta, joka hallitsee lämpötila-anturia:
+
+ ```python
+ sensor = DHT("11", 5)
+ ```
+
+ Tämä määrittää instanssin `DHT`-luokasta, joka hallitsee **D**igitaalisia **H**umidity- ja **T**emperature-antureita. Ensimmäinen parametri kertoo koodille, että käytettävä anturi on *DHT11*-anturi - käyttämäsi kirjasto tukee tämän anturin muita versioita. Toinen parametri kertoo koodille, että anturi on liitetty digitaaliseen porttiin `D5` Grove Base hatissa.
+
+ > ✅ Muista, että kaikilla liittimillä on yksilölliset pinninumerot. Pinnit 0, 2, 4 ja 6 ovat analogisia pinnejä, pinnit 5, 16, 18, 22, 24 ja 26 ovat digitaalisia pinnejä.
+
+1. Lisää loputon silmukka edellisen koodin jälkeen, joka kysyy lämpötila-anturin arvoa ja tulostaa sen konsoliin:
+
+ ```python
+ while True:
+ _, temp = sensor.read()
+ print(f'Temperature {temp}°C')
+ ```
+
+ `sensor.read()`-kutsu palauttaa tuple-muotoisen arvon, joka sisältää kosteuden ja lämpötilan. Tarvitset vain lämpötilan, joten kosteus jätetään huomiotta. Lämpötila-arvo tulostetaan konsoliin.
+
+1. Lisää pieni kymmenen sekunnin viive silmukan loppuun, koska lämpötilatasoja ei tarvitse tarkistaa jatkuvasti. Viive vähentää laitteen virrankulutusta.
+
+ ```python
+ time.sleep(10)
+ ```
+
+1. Suorita seuraava komento VS Coden terminaalista käynnistääksesi Python-sovelluksesi:
+
+ ```sh
+ python3 app.py
+ ```
+
+ Sinun pitäisi nähdä lämpötila-arvoja tulostettuna konsoliin. Käytä jotain anturin lämmittämiseen, kuten paina peukaloa sen päälle tai käytä tuuletinta nähdäksesi arvojen muuttuvan:
+
+ ```output
+ pi@raspberrypi:~/temperature-sensor $ python3 app.py
+ Temperature 26°C
+ Temperature 26°C
+ Temperature 28°C
+ Temperature 30°C
+ Temperature 32°C
+ ```
+
+> 💁 Löydät tämän koodin [code-temperature/pi](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/pi) -kansiosta.
+
+😀 Lämpötila-anturin ohjelmointi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md b/translations/fi/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md
new file mode 100644
index 00000000..cadaedf8
--- /dev/null
+++ b/translations/fi/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md
@@ -0,0 +1,71 @@
+
+# Julkaise lämpötila - Virtuaalinen IoT-laitteisto ja Raspberry Pi
+
+Tässä oppitunnin osassa julkaiset Raspberry Pi:n tai virtuaalisen IoT-laitteen havaitsemat lämpötilaarvot MQTT:n kautta, jotta niitä voidaan myöhemmin käyttää GDD:n laskemiseen.
+
+## Julkaise lämpötila
+
+Kun lämpötila on luettu, se voidaan julkaista MQTT:n kautta "palvelin"-koodille, joka lukee arvot ja tallentaa ne valmiiksi GDD-laskentaa varten.
+
+### Tehtävä - julkaise lämpötila
+
+Ohjelmoi laite julkaisemaan lämpötiladataa.
+
+1. Avaa `temperature-sensor`-sovellusprojekti, jos se ei ole jo avoinna.
+
+1. Toista oppitunnin 4 vaiheet MQTT-yhteyden muodostamiseksi ja telemetrian lähettämiseksi. Käytät samaa julkista Mosquitto-välittäjää.
+
+ Vaiheet tähän ovat:
+
+ - Lisää MQTT:n pip-paketti
+ - Lisää koodi MQTT-välittäjään yhdistämiseksi
+ - Lisää koodi telemetrian julkaisemiseksi
+
+ > ⚠️ Katso [ohjeet MQTT-yhteyden muodostamiseen](../../../1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md) ja [ohjeet telemetrian lähettämiseen](../../../1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md) oppitunnista 4 tarvittaessa.
+
+1. Varmista, että `client_name` heijastaa tämän projektin nimeä:
+
+ ```python
+ client_name = id + 'temperature_sensor_client'
+ ```
+
+1. Telemetriaa varten, lähetä valon arvon sijasta DHT-anturin lukema lämpötilaarvo JSON-dokumentin ominaisuudessa nimeltä `temperature`:
+
+ ```python
+ _, temp = sensor.read()
+ telemetry = json.dumps({'temperature' : temp})
+ ```
+
+1. Lämpötilaa ei tarvitse lukea kovin usein - se ei muutu merkittävästi lyhyessä ajassa, joten aseta `time.sleep` 10 minuuttiin:
+
+ ```cpp
+ time.sleep(10 * 60);
+ ```
+
+ > 💁 `sleep`-funktio ottaa ajan sekunteina, joten arvon lukemisen helpottamiseksi aika annetaan laskennan tuloksena. 60 sekuntia minuutissa, joten 10 x (60 sekuntia minuutissa) antaa 10 minuutin viiveen.
+
+1. Suorita koodi samalla tavalla kuin suoritat koodin edellisessä tehtävän osassa. Jos käytät virtuaalista IoT-laitetta, varmista, että CounterFit-sovellus on käynnissä ja kosteus- ja lämpötila-anturit on luotu oikeille pinneille.
+
+ ```output
+ pi@raspberrypi:~/temperature-sensor $ python3 app.py
+ MQTT connected!
+ Sending telemetry {"temperature": 25}
+ Sending telemetry {"temperature": 25}
+ ```
+
+> 💁 Löydät tämän koodin [code-publish-temperature/virtual-device](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/virtual-device)-kansiosta tai [code-publish-temperature/pi](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/pi)-kansiosta.
+
+😀 Olet onnistuneesti julkaissut lämpötilan telemetriana laitteestasi.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md b/translations/fi/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md
new file mode 100644
index 00000000..52080567
--- /dev/null
+++ b/translations/fi/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md
@@ -0,0 +1,154 @@
+
+# Mittaa lämpötila - Virtuaalinen IoT-laitteisto
+
+Tässä oppitunnin osassa lisäät lämpötila-anturin virtuaaliseen IoT-laitteeseesi.
+
+## Virtuaalinen laitteisto
+
+Virtuaalinen IoT-laite käyttää simuloitua Grove Digital Humidity and Temperature -anturia. Tämä pitää tämän harjoituksen samanlaisena kuin fyysisen Grove DHT11 -anturin käyttäminen Raspberry Pi:ssä.
+
+Anturi yhdistää **lämpötila-anturin** ja **kosteusanturin**, mutta tässä harjoituksessa keskitytään vain lämpötila-anturiin. Fyysisessä IoT-laitteessa lämpötila-anturi olisi [termistori](https://wikipedia.org/wiki/Thermistor), joka mittaa lämpötilaa havaitsemalla vastuksen muutoksen lämpötilan muuttuessa. Lämpötila-anturit ovat yleensä digitaalisia antureita, jotka muuntavat sisäisesti mitatun vastuksen lämpötilaksi Celsius-asteina (tai Kelvineinä tai Fahrenheit-asteina).
+
+### Lisää anturit CounterFitiin
+
+Virtuaalisen kosteus- ja lämpötila-anturin käyttämiseksi sinun täytyy lisätä nämä kaksi anturia CounterFit-sovellukseen.
+
+#### Tehtävä - lisää anturit CounterFitiin
+
+Lisää kosteus- ja lämpötila-anturit CounterFit-sovellukseen.
+
+1. Luo tietokoneellesi uusi Python-sovellus kansioon nimeltä `temperature-sensor`, jossa on yksi tiedosto nimeltä `app.py`, sekä Python-virtuaaliympäristö, ja lisää CounterFit-pip-paketit.
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin CounterFit Python -projektin luomisesta ja asettamisesta oppitunnissa 1](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md).
+
+1. Asenna lisäpaketti pipin kautta, jotta voit asentaa CounterFit-shimin DHT11-anturille. Varmista, että asennat tämän terminaalista, jossa virtuaaliympäristö on aktivoitu.
+
+ ```sh
+ pip install counterfit-shims-seeed-python-dht
+ ```
+
+1. Varmista, että CounterFit-verkkosovellus on käynnissä.
+
+1. Luo kosteusanturi:
+
+ 1. *Create sensor* -ruudussa *Sensors*-paneelissa avaa *Sensor type* -valikko ja valitse *Humidity*.
+
+ 1. Jätä *Units* asetukseksi *Percentage*.
+
+ 1. Varmista, että *Pin* on asetettu arvoon *5*.
+
+ 1. Valitse **Add**-painike luodaksesi kosteusanturin pinniin 5.
+
+ 
+
+ Kosteusanturi luodaan ja se näkyy anturilistassa.
+
+ 
+
+1. Luo lämpötila-anturi:
+
+ 1. *Create sensor* -ruudussa *Sensors*-paneelissa avaa *Sensor type* -valikko ja valitse *Temperature*.
+
+ 1. Jätä *Units* asetukseksi *Celsius*.
+
+ 1. Varmista, että *Pin* on asetettu arvoon *6*.
+
+ 1. Valitse **Add**-painike luodaksesi lämpötila-anturin pinniin 6.
+
+ 
+
+ Lämpötila-anturi luodaan ja se näkyy anturilistassa.
+
+ 
+
+## Ohjelmoi lämpötila-anturisovellus
+
+Nyt voit ohjelmoida lämpötila-anturisovelluksen käyttämällä CounterFit-antureita.
+
+### Tehtävä - ohjelmoi lämpötila-anturisovellus
+
+Ohjelmoi lämpötila-anturisovellus.
+
+1. Varmista, että `temperature-sensor`-sovellus on auki VS Codessa.
+
+1. Avaa `app.py`-tiedosto.
+
+1. Lisää seuraava koodi `app.py`-tiedoston alkuun yhdistääksesi sovelluksen CounterFitiin:
+
+ ```python
+ from counterfit_connection import CounterFitConnection
+ CounterFitConnection.init('127.0.0.1', 5000)
+ ```
+
+1. Lisää seuraava koodi `app.py`-tiedostoon tarvittavien kirjastojen tuomiseksi:
+
+ ```python
+ import time
+ from counterfit_shims_seeed_python_dht import DHT
+ ```
+
+ `from seeed_dht import DHT` -lause tuo `DHT`-anturiklassin, jonka avulla voidaan käyttää virtuaalista Grove-lämpötila-anturia `counterfit_shims_seeed_python_dht`-moduulin shimin kautta.
+
+1. Lisää seuraava koodi edellisen koodin jälkeen luodaksesi instanssin, joka hallitsee virtuaalista kosteus- ja lämpötila-anturia:
+
+ ```python
+ sensor = DHT("11", 5)
+ ```
+
+ Tämä määrittää `DHT`-luokan instanssin, joka hallitsee virtuaalista **D**igitaali**H**umidity ja **T**emperature -anturia. Ensimmäinen parametri kertoo koodille, että käytettävä anturi on virtuaalinen *DHT11*-anturi. Toinen parametri kertoo koodille, että anturi on kytketty porttiin `5`.
+
+ > 💁 CounterFit simuloi tätä yhdistettyä kosteus- ja lämpötila-anturia yhdistämällä kahteen anturiin: kosteusanturiin annetussa pinnissä ja lämpötila-anturiin, joka toimii seuraavassa pinnissä. Jos kosteusanturi on pinnissä 5, shim odottaa lämpötila-anturin olevan pinnissä 6.
+
+1. Lisää loputon silmukka edellisen koodin jälkeen, jotta lämpötila-anturin arvo voidaan kysyä ja tulostaa konsoliin:
+
+ ```python
+ while True:
+ _, temp = sensor.read()
+ print(f'Temperature {temp}°C')
+ ```
+
+ Kutsu `sensor.read()` palauttaa tuplen, joka sisältää kosteuden ja lämpötilan. Tarvitset vain lämpötilan arvon, joten kosteusarvo jätetään huomiotta. Lämpötilan arvo tulostetaan sitten konsoliin.
+
+1. Lisää pieni kymmenen sekunnin viive silmukan loppuun, koska lämpötilatasoja ei tarvitse tarkistaa jatkuvasti. Viive vähentää laitteen virrankulutusta.
+
+ ```python
+ time.sleep(10)
+ ```
+
+1. Suorita seuraava komento aktivoidussa virtuaaliympäristössä VS Coden terminaalista ajaaksesi Python-sovelluksesi:
+
+ ```sh
+ python app.py
+ ```
+
+1. Muuta CounterFit-sovelluksessa lämpötila-anturin arvoa, jonka sovellus lukee. Voit tehdä tämän kahdella tavalla:
+
+ * Syötä numero *Value*-kenttään lämpötila-anturia varten ja valitse **Set**-painike. Syöttämäsi numero on arvo, jonka anturi palauttaa.
+
+ * Valitse *Random*-valintaruutu ja syötä *Min*- ja *Max*-arvot, sitten valitse **Set**-painike. Joka kerta, kun anturi lukee arvon, se lukee satunnaisen numeron *Min*- ja *Max*-arvojen väliltä.
+
+ Näet konsolissa arvot, jotka olet asettanut. Muuta *Value*- tai *Random*-asetuksia nähdäksesi arvon muuttuvan.
+
+ ```output
+ (.venv) ➜ temperature-sensor python app.py
+ Temperature 28.25°C
+ Temperature 30.71°C
+ Temperature 25.17°C
+ ```
+
+> 💁 Löydät tämän koodin [code-temperature/virtual-device](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/virtual-device) -kansiosta.
+
+😀 Lämpötila-anturiohjelmasi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md b/translations/fi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md
new file mode 100644
index 00000000..753d3bb2
--- /dev/null
+++ b/translations/fi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md
@@ -0,0 +1,82 @@
+
+# Julkaise lämpötila - Wio Terminal
+
+Tässä oppitunnin osassa julkaiset Wio Terminalin havaitsemat lämpötilaarvot MQTT:n kautta, jotta niitä voidaan myöhemmin käyttää GDD:n laskemiseen.
+
+## Julkaise lämpötila
+
+Kun lämpötila on luettu, se voidaan julkaista MQTT:n kautta "palvelin"-koodille, joka lukee arvot ja tallentaa ne valmiiksi GDD-laskentaa varten. Mikro-ohjaimet eivät oletusarvoisesti lue aikaa Internetistä tai seuraa aikaa reaaliaikakellolla, vaan laite täytyy ohjelmoida tekemään tämä, olettaen että sillä on tarvittava laitteisto.
+
+Tämän oppitunnin yksinkertaistamiseksi aikaa ei lähetetä anturidatan mukana, vaan se voidaan lisätä palvelinkoodissa myöhemmin, kun viestit vastaanotetaan.
+
+### Tehtävä
+
+Ohjelmoi laite julkaisemaan lämpötiladata.
+
+1. Avaa `temperature-sensor` Wio Terminal -projekti
+
+1. Toista oppitunnin 4 vaiheet MQTT-yhteyden muodostamiseksi ja telemetrian lähettämiseksi. Käytät samaa julkista Mosquitto-välittäjää.
+
+ Vaiheet tähän ovat:
+
+ - Lisää Seeed WiFi- ja MQTT-kirjastot `.ini`-tiedostoon
+ - Lisää konfiguraatiotiedosto ja koodi WiFi-yhteyden muodostamiseksi
+ - Lisää koodi MQTT-välittäjään yhdistämiseksi
+ - Lisää koodi telemetrian julkaisemiseksi
+
+ > ⚠️ Katso [ohjeet MQTT-yhteyden muodostamiseen](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md) ja [ohjeet telemetrian lähettämiseen](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md) oppitunnista 4 tarvittaessa.
+
+1. Varmista, että `CLIENT_NAME` `config.h`-otsikkotiedostossa vastaa tätä projektia:
+
+ ```cpp
+ const string CLIENT_NAME = ID + "temperature_sensor_client";
+ ```
+
+1. Telemetriaa varten, lähetä DHT-anturin lukema lämpötilaarvo JSON-dokumentin ominaisuudessa nimeltä `temperature` muuttamalla `loop`-funktiota tiedostossa `main.cpp`:
+
+ ```cpp
+ float temp_hum_val[2] = {0};
+ dht.readTempAndHumidity(temp_hum_val);
+
+ DynamicJsonDocument doc(1024);
+ doc["temperature"] = temp_hum_val[1];
+ ```
+
+1. Lämpötilaa ei tarvitse lukea kovin usein - se ei muutu merkittävästi lyhyessä ajassa, joten aseta `delay` `loop`-funktiossa 10 minuuttiin:
+
+ ```cpp
+ delay(10 * 60 * 1000);
+ ```
+
+ > 💁 `delay`-funktio ottaa ajan millisekunteina, joten lukemisen helpottamiseksi arvo annetaan laskennan tuloksena. 1 000 ms sekunnissa, 60 s minuutissa, joten 10 x (60 s minuutissa) x (1 000 ms sekunnissa) antaa 10 minuutin viiveen.
+
+1. Lataa tämä Wio Terminaliin ja käytä sarjamonitoria nähdäksesi lämpötilan lähettämisen MQTT-välittäjälle.
+
+ ```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}
+ ```
+
+> 💁 Löydät tämän koodin [code-publish-temperature/wio-terminal](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/wio-terminal) -kansiosta.
+
+😀 Olet onnistuneesti julkaissut lämpötilan telemetriana laitteestasi.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md b/translations/fi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md
new file mode 100644
index 00000000..d072b155
--- /dev/null
+++ b/translations/fi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md
@@ -0,0 +1,143 @@
+
+# Mittaa lämpötila - Wio Terminal
+
+Tässä osassa oppituntia lisäät lämpötila-anturin Wio Terminal -laitteeseesi ja luet siitä lämpötilan arvot.
+
+## Laitteisto
+
+Wio Terminal tarvitsee lämpötila-anturin.
+
+Anturi, jota käytät, on [DHT11 kosteus- ja lämpötila-anturi](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DHT11.html), joka yhdistää kaksi anturia yhteen pakettiin. Tämä on melko suosittu, ja markkinoilla on useita antureita, jotka yhdistävät lämpötilan, kosteuden ja joskus myös ilmanpaineen mittauksen. Lämpötila-anturikomponentti on negatiivisen lämpötilakertoimen (NTC) termistori, eli termistori, jonka vastus pienenee lämpötilan noustessa.
+
+Kyseessä on digitaalinen anturi, joten siinä on sisäänrakennettu ADC, joka luo digitaalisen signaalin sisältäen lämpötila- ja kosteustiedot, joita mikrokontrolleri voi lukea.
+
+### Yhdistä lämpötila-anturi
+
+Grove-lämpötila-anturi voidaan liittää Wio Terminalin digitaaliseen porttiin.
+
+#### Tehtävä - yhdistä lämpötila-anturi
+
+Yhdistä lämpötila-anturi.
+
+
+
+1. Työnnä Grove-kaapelin toinen pää kosteus- ja lämpötila-anturin liittimeen. Se menee sisään vain yhdellä tavalla.
+
+1. Kun Wio Terminal ei ole kytketty tietokoneeseen tai muuhun virtalähteeseen, yhdistä Grove-kaapelin toinen pää Wio Terminalin oikeanpuoleiseen Grove-liittimeen, kun katsot näyttöä. Tämä on liitin, joka on kauimpana virtapainikkeesta.
+
+
+
+## Ohjelmoi lämpötila-anturi
+
+Wio Terminal voidaan nyt ohjelmoida käyttämään liitettyä lämpötila-anturia.
+
+### Tehtävä - ohjelmoi lämpötila-anturi
+
+Ohjelmoi laite.
+
+1. Luo täysin uusi Wio Terminal -projekti käyttämällä PlatformIO:ta. Nimeä tämä projekti `temperature-sensor`. Lisää koodi `setup`-funktioon sarjaportin konfiguroimiseksi.
+
+ > ⚠️ Voit viitata [ohjeisiin PlatformIO-projektin luomisesta projektissa 1, oppitunnilla 1 tarvittaessa](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#create-a-platformio-project).
+
+1. Lisää kirjastoriippuvuus Seeed Grove -kosteus- ja lämpötila-anturin kirjastolle projektin `platformio.ini`-tiedostoon:
+
+ ```ini
+ lib_deps =
+ seeed-studio/Grove Temperature And Humidity Sensor @ 1.0.1
+ ```
+
+ > ⚠️ Voit viitata [ohjeisiin kirjastojen lisäämisestä PlatformIO-projektiin projektissa 1, oppitunnilla 4 tarvittaessa](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md#install-the-wifi-and-mqtt-arduino-libraries).
+
+1. Lisää seuraavat `#include`-direktiivit tiedoston alkuun, olemassa olevan `#include `-direktiivin alle:
+
+ ```cpp
+ #include
+ #include
+ ```
+
+ Tämä tuo tiedostot, joita tarvitaan anturin kanssa toimimiseen. `DHT.h`-otsikkotiedosto sisältää koodin itse anturille, ja lisäämällä `SPI.h`-otsikkotiedoston varmistetaan, että anturin kanssa kommunikointiin tarvittava koodi linkitetään sovelluksen kääntämisen yhteydessä.
+
+1. Ennen `setup`-funktiota, määritä DHT-anturi:
+
+ ```cpp
+ DHT dht(D0, DHT11);
+ ```
+
+ Tämä määrittää `DHT`-luokan instanssin, joka hallitsee **D**igitaalista **K**osteus- ja **L**ämpötila-anturia. Tämä on liitetty porttiin `D0`, oikeanpuoleiseen Grove-liittimeen Wio Terminalissa. Toinen parametri kertoo koodille, että käytettävä anturi on *DHT11* -anturi - käyttämäsi kirjasto tukee myös muita tämän anturin variantteja.
+
+1. Lisää `setup`-funktioon koodi sarjayhteyden asettamiseksi:
+
+ ```cpp
+ void setup()
+ {
+ Serial.begin(9600);
+
+ while (!Serial)
+ ; // Wait for Serial to be ready
+
+ delay(1000);
+ }
+ ```
+
+1. Lisää `setup`-funktion loppuun, viimeisen `delay`-kutsun jälkeen, kutsu DHT-anturin käynnistämiseksi:
+
+ ```cpp
+ dht.begin();
+ ```
+
+1. Lisää `loop`-funktioon koodi, joka kutsuu anturia ja tulostaa lämpötilan sarjaporttiin:
+
+ ```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);
+ }
+ ```
+
+ Tämä koodi määrittää tyhjän 2 desimaaliluvun taulukon ja välittää sen `readTempAndHumidity`-kutsuun `DHT`-instanssissa. Tämä kutsu täyttää taulukon kahdella arvolla - kosteus menee taulukon 0. kohtaan (muista, että C++-taulukot ovat 0-pohjaisia, joten 0. kohta on taulukon 'ensimmäinen' kohta), ja lämpötila menee 1. kohtaan.
+
+ Lämpötila luetaan taulukon 1. kohdasta ja tulostetaan sarjaporttiin.
+
+ > 🇺🇸 Lämpötila luetaan Celsius-asteina. Amerikkalaisille, Celsius-arvon muuntamiseksi Fahrenheit-asteiksi jaa Celsius-arvo viidellä, kerro yhdeksällä ja lisää 32. Esimerkiksi lämpötilalukema 20°C muuttuu ((20/5)*9) + 32 = 68°F.
+
+1. Käännä ja lataa koodi Wio Terminaliin.
+
+ > ⚠️ Voit viitata [ohjeisiin PlatformIO-projektin luomisesta projektissa 1, oppitunnilla 1 tarvittaessa](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#write-the-hello-world-app).
+
+1. Kun koodi on ladattu, voit seurata lämpötilaa sarjavalvonnan avulla:
+
+ ```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
+ ```
+
+> 💁 Löydät tämän koodin [code-temperature/wio-terminal](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/wio-terminal) -kansiosta.
+
+😀 Lämpötila-anturin ohjelma onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/2-detect-soil-moisture/README.md b/translations/fi/2-farm/lessons/2-detect-soil-moisture/README.md
new file mode 100644
index 00000000..62207127
--- /dev/null
+++ b/translations/fi/2-farm/lessons/2-detect-soil-moisture/README.md
@@ -0,0 +1,169 @@
+
+C, lausuttuna *I-squared-C*, on moniohjaaja-moniperiferia-protokolla, jossa mikä tahansa liitetty laite voi toimia ohjaajana tai perifeerisenä laitteena kommunikoiden I²C-väylän kautta (tietoliikennejärjestelmä, joka siirtää dataa). Data lähetetään osoitteellisina paketteina, joissa jokainen paketti sisältää osoitteen sille laitteelle, jolle se on tarkoitettu.
+
+> 💁 Tätä mallia kutsuttiin aiemmin master/slave-malliksi, mutta terminologiaa ollaan hylkäämässä sen yhteyden vuoksi orjuuteen. [Open Source Hardware Association on ottanut käyttöön ohjaaja/perifeerinen](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/), mutta vanhaan terminologiaan voi edelleen törmätä.
+
+Laitteilla on osoite, jota käytetään niiden liittäessä I²C-väylään, ja se on yleensä kovakoodattu laitteeseen. Esimerkiksi jokaisella Seeedin Grove-sensorityypillä on sama osoite, joten kaikilla valosensoreilla on sama osoite, kaikilla painikkeilla on sama osoite, joka eroaa valosensorin osoitteesta. Joillakin laitteilla on mahdollisuus muuttaa osoitetta, esimerkiksi muuttamalla hyppykytkimen asetuksia tai juottamalla pinnejä yhteen.
+
+I²C-väylä koostuu kahdesta pääjohtimesta sekä kahdesta virtajohdosta:
+
+| Johto | Nimi | Kuvaus |
+| ---- | --------- | ----------- |
+| SDA | Sarjadata | Tämä johto lähettää dataa laitteiden välillä. |
+| SCL | Sarjakello | Tämä johto lähettää kellosignaalin ohjaajan määrittämällä nopeudella. |
+| VCC | Jännite yhteiskerääjä | Laitteiden virtalähde. Tämä on kytketty SDA- ja SCL-johtimiin, jotka saavat virtansa vetovastuksen kautta, joka kytkee signaalin pois päältä, kun mikään laite ei ole ohjaaja. |
+| GND | Maa | Tarjoaa yhteisen maadoituksen sähköpiirille. |
+
+
+
+Datan lähettämiseksi yksi laite antaa aloitusehdon osoittaakseen, että se on valmis lähettämään dataa. Se toimii sitten ohjaajana. Ohjaaja lähettää sen laitteen osoitteen, jonka kanssa se haluaa kommunikoida, sekä tiedon siitä, haluaako se lukea vai kirjoittaa dataa. Kun data on lähetetty, ohjaaja lähettää lopetusehdon osoittaakseen, että se on valmis. Tämän jälkeen toinen laite voi ryhtyä ohjaajaksi ja lähettää tai vastaanottaa dataa.
+
+2C:llä on nopeusrajoituksia, ja siinä on kolme eri tilaa, jotka toimivat kiinteillä nopeuksilla. Nopein on High Speed -tila, jonka maksiminopeus on 3,4 Mbps (megabittiä sekunnissa), mutta vain harvat laitteet tukevat tätä nopeutta. Esimerkiksi Raspberry Pi on rajoitettu Fast-tilaan, jonka nopeus on 400 Kbps (kilobittiä sekunnissa). Standard-tila toimii nopeudella 100 Kbps.
+
+> 💁 Jos käytät Raspberry Pi:tä, jossa on Grove Base -hattu IoT-laitteena, näet piirilevyllä useita I2C-liitäntöjä, joita voit käyttää kommunikoidaksesi I2C-antureiden kanssa. Analogiset Grove-anturit käyttävät myös I2C:tä ADC:n avulla lähettääkseen analogisia arvoja digitaalisena datana, joten käyttämäsi valoanturi simuloi analogista pinniä, ja arvo lähetetään I2C:n kautta, koska Raspberry Pi tukee vain digitaalisia pinnejä.
+
+### Universal asynchronous receiver-transmitter (UART)
+
+UART sisältää fyysisen piirin, joka mahdollistaa kahden laitteen välisen kommunikoinnin. Jokaisella laitteella on kaksi viestintäpinniä - lähetys (Tx) ja vastaanotto (Rx). Ensimmäisen laitteen Tx-pinni on kytketty toisen laitteen Rx-pinniin, ja toisen laitteen Tx-pinni on kytketty ensimmäisen laitteen Rx-pinniin. Tämä mahdollistaa datan lähettämisen molempiin suuntiin.
+
+* Laite 1 lähettää dataa Tx-pinnistään, jonka laite 2 vastaanottaa Rx-pinnillään.
+* Laite 1 vastaanottaa dataa Rx-pinnillään, jonka laite 2 lähettää Tx-pinnistään.
+
+
+
+> 🎓 Data lähetetään yksi bitti kerrallaan, ja tätä kutsutaan *sarjakommunikaatioksi*. Useimmissa käyttöjärjestelmissä ja mikrokontrollereissa on *sarjaportteja*, eli yhteyksiä, jotka voivat lähettää ja vastaanottaa sarjadataa ja jotka ovat käytettävissä koodissasi.
+
+UART-laitteilla on [baud rate](https://wikipedia.org/wiki/Symbol_rate) (tunnetaan myös nimellä symbolinopeus), joka määrittää, kuinka nopeasti data lähetetään ja vastaanotetaan bitteinä sekunnissa. Yleinen baud rate on 9 600, mikä tarkoittaa, että 9 600 bittiä (0:ia ja 1:siä) dataa lähetetään sekunnissa.
+
+UART käyttää aloitus- ja lopetusbittejä - eli se lähettää aloitusbitin ilmoittaakseen, että se on lähettämässä tavua (8 bittiä) dataa, ja lopetusbitin sen jälkeen, kun 8 bittiä on lähetetty.
+
+UART-nopeus riippuu laitteistosta, mutta jopa nopeimmat toteutukset eivät ylitä 6,5 Mbps (megabittiä sekunnissa, eli miljoonia bittejä, 0 tai 1, lähetetty sekunnissa).
+
+Voit käyttää UART:ia GPIO-pinnien kautta - voit määrittää yhden pinnin Tx:ksi ja toisen Rx:ksi ja kytkeä nämä toiseen laitteeseen.
+
+> 💁 Jos käytät Raspberry Pi:tä, jossa on Grove Base -hattu IoT-laitteena, näet piirilevyllä UART-liitännän, jota voit käyttää kommunikoidaksesi antureiden kanssa, jotka käyttävät UART-protokollaa.
+
+### Serial Peripheral Interface (SPI)
+
+SPI on suunniteltu lyhyen matkan viestintään, kuten mikrokontrollerin ja tallennuslaitteen, kuten flash-muistin, välillä. Se perustuu ohjain/periferia-malliin, jossa yksi ohjain (yleensä IoT-laitteen prosessori) kommunikoi useiden periferioiden kanssa. Ohjain hallitsee kaikkea valitsemalla periferian ja lähettämällä tai pyytämällä dataa.
+
+> 💁 Kuten I2C:ssä, termit ohjain ja periferia ovat uusia muutoksia, joten saatat nähdä edelleen vanhempia termejä käytössä.
+
+SPI-ohjaimet käyttävät 3 johtoa sekä yhtä ylimääräistä johtoa per periferia. Periferioilla on 4 johtoa. Nämä johdot ovat:
+
+| Johto | Nimi | Kuvaus |
+| ---- | --------- | ----------- |
+| COPI | Ohjaimen ulostulo, periferian sisääntulo | Tämä johto lähettää dataa ohjaimelta periferiaan. |
+| CIPO | Ohjaimen sisääntulo, periferian ulostulo | Tämä johto lähettää dataa periferialta ohjaimelle. |
+| SCLK | Sarjakello | Tämä johto lähettää kellosignaalin ohjaimen määrittämällä nopeudella. |
+| CS | Piirin valinta | Ohjaimella on useita johtoja, yksi per periferia, ja jokainen johto on kytketty vastaavan periferian CS-johtoon. |
+
+
+
+CS-johtoa käytetään aktivoimaan yksi periferia kerrallaan, kommunikoimalla COPI- ja CIPO-johtojen kautta. Kun ohjaimen täytyy vaihtaa periferiaa, se deaktivoi CS-johdon, joka on kytketty aktiiviseen periferiaan, ja aktivoi johdon, joka on kytketty seuraavaan periferiaan, jonka kanssa se haluaa kommunikoida.
+
+SPI on *täysdupleksi*, mikä tarkoittaa, että ohjain voi lähettää ja vastaanottaa dataa samanaikaisesti samalta periferialta COPI- ja CIPO-johtojen kautta. SPI käyttää kellosignaalia SCLK-johdossa pitääkseen laitteet synkronoituna, joten toisin kuin UART:in kautta lähettäessä, se ei tarvitse aloitus- ja lopetusbittejä.
+
+SPI:lle ei ole määritelty nopeusrajoituksia, ja toteutukset voivat usein lähettää useita megatavuja dataa sekunnissa.
+
+IoT-kehityspaketit tukevat usein SPI:tä joidenkin GPIO-pinnien kautta. Esimerkiksi Raspberry Pi:ssä voit käyttää GPIO-pinnejä 19, 21, 23, 24 ja 26 SPI:lle.
+
+### Langaton viestintä
+
+Jotkut anturit voivat kommunikoida standardien langattomien protokollien, kuten Bluetoothin (pääasiassa Bluetooth Low Energy eli BLE), LoRaWAN:n (**Lo**ng **Ra**nge vähävirtaisen verkon protokolla) tai WiFi:n kautta. Näiden avulla etäanturit, jotka eivät ole fyysisesti kytkettynä IoT-laitteeseen, voivat kommunikoida.
+
+Yksi esimerkki tästä on kaupalliset maaperän kosteusanturit. Nämä mittaavat maaperän kosteuden pellolla ja lähettävät datan LoRaWAN:n kautta keskuslaitteelle, joka käsittelee datan tai lähettää sen Internetiin. Tämä mahdollistaa anturin sijoittamisen kauas IoT-laitteesta, joka hallinnoi dataa, vähentäen virrankulutusta ja tarvetta suurille WiFi-verkoille tai pitkille kaapeleille.
+
+BLE on suosittu edistyneille antureille, kuten ranteessa toimiville kuntoseurantalaitteille. Nämä yhdistävät useita antureita ja lähettävät anturidatan IoT-laitteelle, kuten puhelimellesi, BLE:n kautta.
+
+✅ Onko sinulla Bluetooth-antureita mukanasi, kotonasi tai koulussasi? Näihin voi kuulua lämpötila-anturit, läsnäoloanturit, laitteiden seurantajärjestelmät ja kuntolaitteet.
+
+Yksi suosittu tapa kaupallisten laitteiden yhdistämiseen on Zigbee. Zigbee käyttää WiFiä muodostaakseen mesh-verkkoja laitteiden välillä, joissa jokainen laite yhdistyy mahdollisimman moneen lähellä olevaan laitteeseen, muodostaen suuren määrän yhteyksiä kuin hämähäkin verkko. Kun yksi laite haluaa lähettää viestin Internetiin, se voi lähettää sen lähimmille laitteille, jotka sitten välittävät sen eteenpäin muille lähellä oleville laitteille ja niin edelleen, kunnes se saavuttaa koordinaattorin ja voidaan lähettää Internetiin.
+
+> 🐝 Nimi Zigbee viittaa hunajamehiläisten tanssiin niiden palattua pesään.
+
+## Mittaa maaperän kosteustaso
+
+Voit mitata maaperän kosteustason käyttämällä maaperän kosteusanturia, IoT-laitetta ja huonekasvia tai läheistä maaperäaluetta.
+
+### Tehtävä - mittaa maaperän kosteus
+
+Käy läpi asiaankuuluva opas mitataksesi maaperän kosteuden IoT-laitteellasi:
+
+* [Arduino - Wio Terminal](wio-terminal-soil-moisture.md)
+* [Yksikorttitietokone - Raspberry Pi](pi-soil-moisture.md)
+* [Yksikorttitietokone - Virtuaalilaite](virtual-device-soil-moisture.md)
+
+## Anturin kalibrointi
+
+Anturit perustuvat sähköisten ominaisuuksien, kuten resistanssin tai kapasitanssin, mittaamiseen.
+
+> 🎓 Resistanssi, mitattuna ohmeina (Ω), kertoo kuinka paljon vastustusta sähkövirta kohtaa kulkiessaan jonkin läpi. Kun jännite kohdistetaan materiaaliin, sen läpi kulkevan virran määrä riippuu materiaalin resistanssista. Voit lukea lisää [resistanssin Wikipedia-sivulta](https://wikipedia.org/wiki/Electrical_resistance_and_conductance).
+
+> 🎓 Kapasitanssi, mitattuna faradeina (F), on komponentin tai piirin kyky kerätä ja varastoida sähköenergiaa. Voit lukea lisää kapasitanssista [kapasitanssin Wikipedia-sivulta](https://wikipedia.org/wiki/Capacitance).
+
+Nämä mittaukset eivät aina ole hyödyllisiä - kuvittele lämpötila-anturi, joka antaisi mittauksen 22,5 kΩ! Sen sijaan mitattu arvo täytyy muuntaa hyödylliseksi yksiköksi kalibroimalla - eli yhdistämällä mitatut arvot mitattuun suureeseen, jotta uudet mittaukset voidaan muuntaa oikeaan yksikköön.
+
+Jotkut anturit ovat valmiiksi kalibroituja. Esimerkiksi viime tunnilla käyttämäsi lämpötila-anturi oli jo kalibroitu niin, että se voi palauttaa lämpötilamittauksen °C-yksikössä. Tehtaalla ensimmäinen anturi altistettaisiin tunnetuille lämpötiloille ja resistanssi mitattaisiin. Tätä käytettäisiin sitten laskelman luomiseen, joka voi muuntaa mitatun arvon Ω-yksiköstä (resistanssin yksikkö) °C-yksikköön.
+
+> 💁 Kaava, jolla lasketaan resistanssi lämpötilasta, on nimeltään [Steinhart–Hart-yhtälö](https://wikipedia.org/wiki/Steinhart–Hart_equation).
+
+### Maaperän kosteusanturin kalibrointi
+
+Maaperän kosteus mitataan gravimetrisellä tai volymetrisellä vesipitoisuudella.
+
+* Gravimetrinen tarkoittaa veden painoa maaperän yksikköpainossa, mitattuna kilogrammoina vettä per kilogramma kuivaa maaperää.
+* Volymetrinen tarkoittaa veden tilavuutta maaperän yksikkötilavuudessa, mitattuna kuutiometreinä vettä per kuutiometri kuivaa maaperää.
+
+> 🇺🇸 Amerikkalaisille, yksiköiden johdonmukaisuuden vuoksi nämä voidaan mitata paunoina kilogrammojen sijaan tai kuutiojalkoina kuutiometrien sijaan.
+
+Maaperän kosteusanturit mittaavat sähköistä resistanssia tai kapasitanssia - tämä ei ainoastaan vaihtele maaperän kosteuden mukaan, vaan myös maaperän tyypin mukaan, sillä maaperän komponentit voivat muuttaa sen sähköisiä ominaisuuksia. Ihanteellisesti anturit tulisi kalibroida - eli ottaa anturin lukemia ja verrata niitä tieteellisemmällä menetelmällä saatuihin mittauksiin. Esimerkiksi laboratorio voi laskea gravimetrisen maaperän kosteuden tietyn pellon näytteistä muutaman kerran vuodessa, ja näitä lukuja voidaan käyttää anturin kalibrointiin, yhdistäen anturin lukemat gravimetriseen maaperän kosteuteen.
+
+
+
+Yllä oleva graafi näyttää, kuinka anturi kalibroidaan. Jännite mitataan maaperänäytteestä, joka sitten analysoidaan laboratoriossa vertaamalla kosteaa painoa kuivaan painoon (mittaamalla paino kosteana, sitten kuivaamalla uunissa ja mittaamalla kuivana). Kun muutama lukema on otettu, ne voidaan piirtää graafiin ja sovittaa viiva pisteisiin. Tätä viivaa voidaan sitten käyttää muuntamaan IoT-laitteen ottamat maaperän kosteusanturin lukemat todellisiksi maaperän kosteuden mittauksiksi.
+
+💁 Resistiivisillä maaperän kosteusantureilla jännite kasvaa maaperän kosteuden kasvaessa. Kapasitiivisilla maaperän kosteusantureilla jännite laskee maaperän kosteuden kasvaessa, joten näiden graafit kallistuisivat alaspäin, eivät ylöspäin.
+
+
+
+Yllä oleva graafi näyttää maaperän kosteusanturin jännitelukeman, ja seuraamalla sitä graafin viivaan voidaan laskea todellinen maaperän kosteus.
+
+Tämä lähestymistapa tarkoittaa, että viljelijän tarvitsee saada vain muutama laboratoriomittaus pellosta, ja sitten he voivat käyttää IoT-laitteita mittaamaan maaperän kosteutta - mikä nopeuttaa mittausten ottamista huomattavasti.
+
+---
+
+## 🚀 Haaste
+
+Resistiivisillä ja kapasitiivisilla maaperän kosteusantureilla on useita eroja. Mitkä ovat nämä erot, ja mikä tyyppi (jos mikään) on paras viljelijälle? Muuttuuko vastaus kehittyvien ja kehittyneiden maiden välillä?
+
+## Luentojälkeinen kysely
+
+[Luentojälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/12)
+
+## Kertaus ja itseopiskelu
+
+Lue lisää antureiden ja toimilaitteiden käyttämistä laitteistoista ja protokollista:
+
+* [GPIO Wikipedia-sivu](https://wikipedia.org/wiki/General-purpose_input/output)
+* [UART Wikipedia-sivu](https://wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter)
+* [SPI Wikipedia-sivu](https://wikipedia.org/wiki/Serial_Peripheral_Interface)
+* [I2C Wikipedia-sivu](https://wikipedia.org/wiki/I²C)
+* [Zigbee Wikipedia-sivu](https://wikipedia.org/wiki/Zigbee)
+
+## Tehtävä
+
+[Kalibroi anturisi](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/2-detect-soil-moisture/assignment.md b/translations/fi/2-farm/lessons/2-detect-soil-moisture/assignment.md
new file mode 100644
index 00000000..25414aa7
--- /dev/null
+++ b/translations/fi/2-farm/lessons/2-detect-soil-moisture/assignment.md
@@ -0,0 +1,61 @@
+
+# Kalibroi anturisi
+
+## Ohjeet
+
+Tässä osiossa keräsit maankosteusanturin lukemia, jotka mitataan arvoina välillä 0–1023. Jotta voit muuntaa nämä todellisiksi maankosteuslukemiksi, sinun täytyy kalibroida anturisi. Tämä tapahtuu ottamalla lukemia maaperänäytteistä ja laskemalla näytteistä gravimetrinen maankosteuspitoisuus.
+
+Sinun täytyy toistaa nämä vaiheet useita kertoja saadaksesi tarvittavat lukemat, käyttäen joka kerta eri kosteustasoa maaperässä.
+
+1. Ota maankosteuslukema maankosteusanturilla. Kirjoita tämä lukema ylös.
+
+1. Ota maaperänäyte ja punnitse se. Kirjoita tämä paino ylös.
+
+1. Kuivaa maaperä – lämmin uuni 110°C:ssa (230°F) muutaman tunnin ajan on paras tapa. Voit myös kuivata sen auringonvalossa tai asettaa sen lämpimään, kuivaan paikkaan, kunnes maaperä on täysin kuiva. Sen pitäisi olla jauhemaista ja irtonaista.
+
+ > 💁 Laboratoriossa tarkimpien tulosten saamiseksi maaperä kuivattaisiin uunissa 48–72 tuntia. Jos koulussasi on kuivausuuneja, kysy, voitko käyttää niitä pidempään kuivaamiseen. Mitä pidempään kuivaat, sitä kuivempi näyte ja tarkemmat tulokset.
+
+1. Punnitse maaperä uudelleen.
+
+ > 🔥 Jos kuivaat sen uunissa, varmista, että se on ensin jäähtynyt!
+
+Gravimetrinen maankosteus lasketaan seuraavasti:
+
+
+
+* W - märän maaperän paino
+* W - kuivan maaperän paino
+
+Esimerkiksi, jos sinulla on maaperänäyte, joka painaa 212 g märkänä ja 197 g kuivana:
+
+
+
+* W = 212 g
+* W = 197 g
+* 212 - 197 = 15
+* 15 / 197 = 0.076
+* 0.076 * 100 = 7.6 %
+
+Tässä esimerkissä maaperän gravimetrinen maankosteus on 7.6 %.
+
+Kun sinulla on lukemat vähintään kolmesta näytteestä, piirrä graafi maankosteusprosentista maankosteusanturin lukemaan ja lisää paras sovitusviiva pisteisiin. Voit sitten käyttää tätä laskemaan gravimetrisen maankosteuspitoisuuden tietylle anturin lukemalle lukemalla arvon viivalta.
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannettavaa |
+| -------- | ----------- | -------- | ------------- |
+| Kalibrointidatan kerääminen | Kerää vähintään 3 kalibrointinäytettä | Kerää vähintään 2 kalibrointinäytettä | Kerää vähintään 1 kalibrointinäyte |
+| Kalibroitu lukema | Piirrä onnistuneesti kalibrointigraafi, tee lukema anturista ja muunna se gravimetriseksi maankosteuspitoisuudeksi | Piirrä onnistuneesti kalibrointigraafi | Ei pysty piirtämään graafia |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md b/translations/fi/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md
new file mode 100644
index 00000000..da21112a
--- /dev/null
+++ b/translations/fi/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md
@@ -0,0 +1,25 @@
+
+# Mittaa maaperän kosteutta - Raspberry Pi
+
+Tässä oppitunnin osassa lisäät kapasiivisen maaperän kosteusanturin Raspberry Pi:hin ja luet siitä arvoja.
+
+## Laitteisto
+
+Raspberry Pi tarvitsee kapasiivisen maaperän kosteusanturin.
+
+Käytettävä anturi on [Capacitive Soil Moisture Sensor](https://www.seeedstudio.com/Grove-Capacitive-Moisture-Sensor-Corrosion-Resistant.html), joka mittaa maaperän kosteutta havaitsemalla maaperän kapasitanssin, ominaisuuden, joka muuttuu maaperän kosteuden muuttuessa. Kun maaperän kosteus kasvaa, jännite laskee.
+
+Tämä on analoginen anturi, joten se käyttää analogista pinniä ja Grove Base Hatin 10-bittistä ADC:tä Pi:ssä muuntaakseen jännitteen digitaaliseksi signaaliksi välillä 1-1,023. Tämä signaali lähetetään sitten I
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md b/translations/fi/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md
new file mode 100644
index 00000000..06397e0d
--- /dev/null
+++ b/translations/fi/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md
@@ -0,0 +1,123 @@
+
+# Mittaa maaperän kosteutta - Virtuaalinen IoT-laitteisto
+
+Tässä osassa oppituntia lisäät kapasitiivisen maaperän kosteusanturin virtuaaliseen IoT-laitteeseesi ja luet siitä arvoja.
+
+## Virtuaalinen laitteisto
+
+Virtuaalinen IoT-laite käyttää simuloitua Grove-kapasitiivista maaperän kosteusanturia. Tämä pitää tämän harjoituksen samanlaisena kuin fyysisen Grove-kapasitiivisen maaperän kosteusanturin käyttäminen Raspberry Pi:llä.
+
+Fyysisessä IoT-laitteessa maaperän kosteusanturi olisi kapasitiivinen anturi, joka mittaa maaperän kosteutta havaitsemalla maaperän kapasitanssin, joka muuttuu maaperän kosteuden muuttuessa. Kun maaperän kosteus kasvaa, jännite pienenee.
+
+Tämä on analoginen anturi, joten se käyttää simuloitua 10-bittistä ADC:tä raportoidakseen arvon välillä 1–1 023.
+
+### Lisää maaperän kosteusanturi CounterFitiin
+
+Virtuaalisen maaperän kosteusanturin käyttämiseksi sinun täytyy lisätä se CounterFit-sovellukseen.
+
+#### Tehtävä - Lisää maaperän kosteusanturi CounterFitiin
+
+Lisää maaperän kosteusanturi CounterFit-sovellukseen.
+
+1. Luo uusi Python-sovellus tietokoneellesi kansioon nimeltä `soil-moisture-sensor`, jossa on yksi tiedosto nimeltä `app.py`, sekä Python-virtuaaliympäristö, ja lisää CounterFit-pip-paketit.
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin CounterFit Python -projektin luomisesta ja asettamisesta oppitunnilla 1](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md).
+
+1. Varmista, että CounterFit-verkkosovellus on käynnissä.
+
+1. Luo maaperän kosteusanturi:
+
+ 1. *Create sensor* -ruudussa *Sensors*-paneelissa avaa *Sensor type* -valikko ja valitse *Soil Moisture*.
+
+ 1. Jätä *Units* asetukseksi *NoUnits*.
+
+ 1. Varmista, että *Pin* on asetettu arvoon *0*.
+
+ 1. Valitse **Add**-painike luodaksesi *Soil Moisture* -anturin Pin 0:aan.
+
+ 
+
+ Maaperän kosteusanturi luodaan ja se näkyy anturilistassa.
+
+ 
+
+## Ohjelmoi maaperän kosteusanturisovellus
+
+Nyt voit ohjelmoida maaperän kosteusanturisovelluksen käyttämällä CounterFit-antureita.
+
+### Tehtävä - Ohjelmoi maaperän kosteusanturisovellus
+
+Ohjelmoi maaperän kosteusanturisovellus.
+
+1. Varmista, että `soil-moisture-sensor`-sovellus on auki VS Code -editorissa.
+
+1. Avaa `app.py`-tiedosto.
+
+1. Lisää seuraava koodi `app.py`-tiedoston alkuun yhdistääksesi sovelluksen CounterFitiin:
+
+ ```python
+ from counterfit_connection import CounterFitConnection
+ CounterFitConnection.init('127.0.0.1', 5000)
+ ```
+
+1. Lisää seuraava koodi `app.py`-tiedostoon tarvittavien kirjastojen tuomiseksi:
+
+ ```python
+ import time
+ from counterfit_shims_grove.adc import ADC
+ ```
+
+ `import time` -lause tuo `time`-moduulin, jota käytetään myöhemmin tässä tehtävässä.
+
+ `from counterfit_shims_grove.adc import ADC` -lause tuo `ADC`-luokan, jonka avulla voidaan olla vuorovaikutuksessa virtuaalisen analogi-digitaalimuuntimen kanssa, joka voi yhdistää CounterFit-anturiin.
+
+1. Lisää tämän alle seuraava koodi luodaksesi `ADC`-luokan instanssin:
+
+ ```python
+ adc = ADC()
+ ```
+
+1. Lisää loputon silmukka, joka lukee tämän ADC:n arvoja pinistä 0 ja kirjoittaa tuloksen konsoliin. Tämä silmukka voi sitten odottaa 10 sekuntia lukemien välillä.
+
+ ```python
+ while True:
+ soil_moisture = adc.read(0)
+ print("Soil moisture:", soil_moisture)
+
+ time.sleep(10)
+ ```
+
+1. Muuta CounterFit-sovelluksessa maaperän kosteusanturin arvoa, jonka sovellus lukee. Voit tehdä tämän kahdella tavalla:
+
+ * Syötä numero *Value*-kenttään maaperän kosteusanturille ja valitse **Set**-painike. Syöttämäsi numero on arvo, jonka anturi palauttaa.
+
+ * Valitse *Random*-valintaruutu ja syötä *Min*- ja *Max*-arvot, sitten valitse **Set**-painike. Joka kerta, kun anturi lukee arvon, se lukee satunnaisen numeron *Min*- ja *Max*-arvojen väliltä.
+
+1. Suorita Python-sovellus. Näet maaperän kosteusmittaukset kirjoitettuna konsoliin. Muuta *Value*- tai *Random*-asetuksia nähdäksesi arvon muuttuvan.
+
+ ```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
+ ```
+
+> 💁 Löydät tämän koodin [code/virtual-device](../../../../../2-farm/lessons/2-detect-soil-moisture/code/virtual-device) -kansiosta.
+
+😀 Maaperän kosteusanturisovelluksesi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md b/translations/fi/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md
new file mode 100644
index 00000000..04ad2b6f
--- /dev/null
+++ b/translations/fi/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md
@@ -0,0 +1,117 @@
+
+# Mittaa maaperän kosteutta - Wio Terminal
+
+Tässä osassa oppituntia lisäät kapasiivisen maaperän kosteusanturin Wio Terminaliin ja luet sen antamia arvoja.
+
+## Laitteisto
+
+Wio Terminal tarvitsee kapasiivisen maaperän kosteusanturin.
+
+Anturi, jota käytät, on [Capacitive Soil Moisture Sensor](https://www.seeedstudio.com/Grove-Capacitive-Moisture-Sensor-Corrosion-Resistant.html), joka mittaa maaperän kosteutta havaitsemalla maaperän kapasitanssin. Tämä ominaisuus muuttuu maaperän kosteuden muuttuessa. Kun maaperän kosteus kasvaa, jännite laskee.
+
+Kyseessä on analoginen anturi, joka liitetään Wio Terminalin analogisiin pinneihin. Anturi käyttää sisäänrakennettua ADC:tä (analoginen-digitaalimuunnin) luodakseen arvon välillä 0–1 023.
+
+### Liitä maaperän kosteusanturi
+
+Grove-maaperän kosteusanturi voidaan liittää Wio Terminalin konfiguroitavaan analoginen/digitaalinen-porttiin.
+
+#### Tehtävä - liitä maaperän kosteusanturi
+
+Liitä maaperän kosteusanturi.
+
+
+
+1. Työnnä Grove-kaapelin toinen pää maaperän kosteusanturin liittimeen. Kaapeli menee sisään vain yhdellä tavalla.
+
+1. Kun Wio Terminal ei ole kytketty tietokoneeseen tai muuhun virtalähteeseen, liitä Grove-kaapelin toinen pää Wio Terminalin oikeanpuoleiseen Grove-liittimeen, kun katsot näyttöä. Tämä liitin on kauimpana virtapainikkeesta.
+
+
+
+1. Työnnä maaperän kosteusanturi maaperään. Anturissa on "korkein asennuslinja" - valkoinen viiva anturin poikki. Työnnä anturi maaperään tähän viivaan asti, mutta älä sen yli.
+
+
+
+1. Voit nyt liittää Wio Terminalin tietokoneeseesi.
+
+## Ohjelmoi maaperän kosteusanturi
+
+Wio Terminal voidaan nyt ohjelmoida käyttämään liitettyä maaperän kosteusanturia.
+
+### Tehtävä - ohjelmoi maaperän kosteusanturi
+
+Ohjelmoi laite.
+
+1. Luo täysin uusi Wio Terminal -projekti PlatformIO:lla. Nimeä projekti `soil-moisture-sensor`. Lisää koodi `setup`-funktioon sarjaportin konfiguroimiseksi.
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin PlatformIO-projektin luomisesta projektissa 1, oppitunnilla 1](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#create-a-platformio-project).
+
+1. Tälle anturille ei ole kirjastoa, mutta voit lukea analogisesta pinnistä sisäänrakennetulla Arduinon [`analogRead`](https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/) -funktiolla. Aloita konfiguroimalla analoginen pinni sisääntuloksi, jotta siitä voidaan lukea arvoja, lisäämällä seuraava `setup`-funktioon.
+
+ ```cpp
+ pinMode(A0, INPUT);
+ ```
+
+ Tämä asettaa `A0`-pinnin, yhdistetyn analoginen/digitaalinen-pinnin, sisääntulopinniksi, josta voidaan lukea jännite.
+
+1. Lisää seuraava koodi `loop`-funktioon lukemaan jännite tästä pinnistä:
+
+ ```cpp
+ int soil_moisture = analogRead(A0);
+ ```
+
+1. Lisää tämän koodin alle seuraava koodi tulostamaan arvo sarjaporttiin:
+
+ ```cpp
+ Serial.print("Soil Moisture: ");
+ Serial.println(soil_moisture);
+ ```
+
+1. Lisää lopuksi 10 sekunnin viive loppuun:
+
+ ```cpp
+ delay(10000);
+ ```
+
+1. Rakenna ja lataa koodi Wio Terminaliin.
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin PlatformIO-projektin luomisesta projektissa 1, oppitunnilla 1](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#write-the-hello-world-app).
+
+1. Kun koodi on ladattu, voit seurata maaperän kosteutta sarjamonitorilla. Lisää vettä maaperään tai poista anturi maaperästä ja katso, miten arvo muuttuu.
+
+ ```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
+ ```
+
+ Esimerkkituloksessa näet, kuinka jännite laskee veden lisäämisen myötä.
+
+> 💁 Löydät tämän koodin [code/wio-terminal](../../../../../2-farm/lessons/2-detect-soil-moisture/code/wio-terminal) -kansiosta.
+
+😀 Maaperän kosteusanturin ohjelmointi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/3-automated-plant-watering/README.md b/translations/fi/2-farm/lessons/3-automated-plant-watering/README.md
new file mode 100644
index 00000000..65f0bdb1
--- /dev/null
+++ b/translations/fi/2-farm/lessons/3-automated-plant-watering/README.md
@@ -0,0 +1,314 @@
+
+# Automaattinen kasvien kastelu
+
+
+
+> Sketchnote: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+Tämä oppitunti on osa [IoT for Beginners Project 2 - Digital Agriculture -sarjaa](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx), joka on peräisin [Microsoft Reactorilta](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn).
+
+[](https://youtu.be/g9FfZwv9R58)
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/13)
+
+## Johdanto
+
+Edellisessä oppitunnissa opit seuraamaan maaperän kosteutta. Tässä oppitunnissa opit rakentamaan automaattisen kastelujärjestelmän keskeiset komponentit, jotka reagoivat maaperän kosteuteen. Opit myös ajastuksesta – kuinka anturit voivat reagoida hitaasti muutoksiin ja kuinka toimilaitteet voivat vaikuttaa mitattaviin ominaisuuksiin ajan kuluessa.
+
+Tässä oppitunnissa käsitellään:
+
+* [Ohjaa suuritehoisia laitteita pienitehoisella IoT-laitteella](../../../../../2-farm/lessons/3-automated-plant-watering)
+* [Ohjaa relettä](../../../../../2-farm/lessons/3-automated-plant-watering)
+* [Ohjaa kasvejasi MQTT:n kautta](../../../../../2-farm/lessons/3-automated-plant-watering)
+* [Anturin ja toimilaitteen ajastus](../../../../../2-farm/lessons/3-automated-plant-watering)
+* [Lisää ajastus kasvien ohjauspalvelimeen](../../../../../2-farm/lessons/3-automated-plant-watering)
+
+## Ohjaa suuritehoisia laitteita pienitehoisella IoT-laitteella
+
+IoT-laitteet käyttävät matalaa jännitettä. Vaikka tämä riittää antureille ja pienitehoisille toimilaitteille, kuten LED-valoille, se ei riitä suurempien laitteiden, kuten kasteluun käytettävän vesipumpun, ohjaamiseen. Jopa pienet pumput, joita voisit käyttää huonekasveihin, kuluttavat liikaa virtaa IoT-kehitysalustalle ja saattaisivat vahingoittaa sen komponentteja.
+
+> 🎓 Virta, joka mitataan ampeereina (A), kuvaa sähkövirran määrää, joka kulkee piirin läpi. Jännite antaa työntövoiman, kun taas virta kuvaa, kuinka paljon työntöä tapahtuu. Voit lukea lisää virrasta [Wikipedia-sivulta sähkövirta](https://wikipedia.org/wiki/Electric_current).
+
+Ratkaisuna on kytkeä pumppu ulkoiseen virtalähteeseen ja käyttää toimilaitetta pumpun käynnistämiseen, aivan kuten valon kytkemisessä päälle. Sormesi tarvitsee vain pienen määrän energiaa kytkimen kääntämiseen, mikä yhdistää valon kotitaloussähköön, joka toimii 110v/240v jännitteellä.
+
+
+
+> 🎓 [Kotitaloussähkö](https://wikipedia.org/wiki/Mains_electricity) viittaa sähköön, joka toimitetaan koteihin ja yrityksiin kansallisen infrastruktuurin kautta monissa maailman osissa.
+
+✅ IoT-laitteet voivat yleensä tarjota 3.3V tai 5V, alle 1 ampeerin (1A) virralla. Vertaa tätä kotitaloussähköön, joka on useimmiten 230V (120V Pohjois-Amerikassa ja 100V Japanissa) ja voi tarjota virtaa laitteille, jotka kuluttavat jopa 30A.
+
+Toimilaitteita, jotka voivat tehdä tämän, on useita, mukaan lukien mekaaniset laitteet, jotka voidaan kiinnittää olemassa oleviin kytkimiin ja jäljitellä sormen liikettä. Suosituin näistä on rele.
+
+### Releet
+
+Rele on sähkömekaaninen kytkin, joka muuntaa sähköisen signaalin mekaaniseksi liikkeeksi, joka kytkee kytkimen päälle. Releen ydin on sähkömagneetti.
+
+> 🎓 [Sähkömagneetit](https://wikipedia.org/wiki/Electromagnet) ovat magneetteja, jotka syntyvät, kun sähkö kulkee käämin läpi. Kun sähkö kytketään päälle, käämi magnetisoituu. Kun sähkö kytketään pois päältä, käämi menettää magnetisminsa.
+
+
+
+Releessä ohjauspiiri syöttää sähkömagneetille virtaa. Kun sähkömagneetti on päällä, se vetää vivun, joka liikuttaa kytkintä, sulkee kontaktit ja täydentää ulostulopiirin.
+
+
+
+Kun ohjauspiiri on pois päältä, sähkömagneetti sammuu, vapauttaa vivun ja avaa kontaktit, katkaisten ulostulopiirin. Releet ovat digitaalisia toimilaitteita – korkea signaali kytkee releen päälle, matala signaali kytkee sen pois päältä.
+
+Ulostulopiiriä voidaan käyttää lisälaitteiden, kuten kastelujärjestelmän, virransyöttöön. IoT-laite voi kytkeä releen päälle, täydentää ulostulopiirin, joka syöttää kastelujärjestelmää, ja kasvit saavat vettä. IoT-laite voi sitten kytkeä releen pois päältä, katkaista kastelujärjestelmän virran ja lopettaa veden virtauksen.
+
+
+
+Yllä olevassa videossa rele kytketään päälle. Releen LED-valo syttyy osoittamaan, että se on päällä (joissakin relekortteissa on LED-valot, jotka osoittavat releen tilan), ja virta lähetetään pumpulle, joka käynnistyy ja pumppaa vettä kasville.
+
+> 💁 Releitä voidaan käyttää myös vaihtamaan kahden ulostulopiirin välillä sen sijaan, että yksi kytkettäisiin päälle ja pois päältä. Kun vipu liikkuu, se siirtää kytkimen täydentämään yhtä ulostulopiiriä toisen sijasta, yleensä jakamalla yhteisen virtayhteyden tai yhteisen maayhteyden.
+
+✅ Tee tutkimusta: Releitä on useita tyyppejä, joilla on eroja, kuten se, kytkeekö ohjauspiiri releen päälle vai pois päältä, kun virta kytketään, tai onko niissä useita ulostulopiirejä. Ota selvää näistä eri tyypeistä.
+
+Kun vipu liikkuu, voit yleensä kuulla sen osuvan sähkömagneettiin selkeällä napsahduksella.
+
+> 💁 Rele voidaan kytkeä niin, että yhteyden muodostaminen itse asiassa katkaisee releen virran, jolloin rele sammuu, mikä sitten lähettää virtaa releelle kytkien sen takaisin päälle, ja niin edelleen. Tämä tarkoittaa, että rele napsahtaa erittäin nopeasti, mikä aiheuttaa surisevan äänen. Näin jotkut ensimmäiset sähköiset ovikellot toimivat.
+
+### Releen virta
+
+Sähkömagneetti ei tarvitse paljon virtaa aktivoituakseen ja vetääkseen vivun, ja sitä voidaan ohjata IoT-kehitysalustan 3.3V tai 5V ulostulolla. Ulostulopiiri voi kantaa paljon enemmän virtaa, riippuen releestä, mukaan lukien kotitaloussähkö tai jopa korkeammat tehot teollisuuskäyttöön. Näin IoT-kehitysalusta voi ohjata kastelujärjestelmää, pienestä pumpusta yksittäiselle kasville aina massiiviseen teollisuusjärjestelmään koko kaupalliselle tilalle.
+
+
+
+Yllä olevassa kuvassa näkyy Grove-rele. Ohjauspiiri yhdistetään IoT-laitteeseen ja kytkee releen päälle tai pois päältä 3.3V tai 5V avulla. Ulostulopiirissä on kaksi liitintä, joista kumpi tahansa voi olla virtalähde tai maa. Ulostulopiiri voi käsitellä jopa 250V ja 10A, mikä riittää monille kotitaloussähköllä toimiville laitteille. Saatavilla on myös releitä, jotka kestävät vielä suurempia tehoja.
+
+
+
+Yllä olevassa kuvassa pumppu saa virtansa releen kautta. Punainen johto yhdistää USB-virtalähteen +5V-liittimen releen ulostulopiirin yhteen liittimeen, ja toinen punainen johto yhdistää ulostulopiirin toisen liittimen pumppuun. Musta johto yhdistää pumpun USB-virtalähteen maahan. Kun rele kytketään päälle, se täydentää piirin, lähettää 5V pumpulle ja käynnistää pumpun.
+
+## Ohjaa relettä
+
+Voit ohjata relettä IoT-kehitysalustaltasi.
+
+### Tehtävä - ohjaa relettä
+
+Käy läpi asiaankuuluva opas releen ohjaamiseksi IoT-laitteellasi:
+
+* [Arduino - Wio Terminal](wio-terminal-relay.md)
+* [Yksikorttitietokone - Raspberry Pi](pi-relay.md)
+* [Yksikorttitietokone - Virtuaalilaite](virtual-device-relay.md)
+
+## Ohjaa kasvejasi MQTT:n kautta
+
+Tähän mennessä relettä on ohjattu IoT-laitteelta suoraan yhden maaperän kosteuslukeman perusteella. Kaupallisessa kastelujärjestelmässä ohjauslogiikka on keskitetty, jolloin se voi tehdä kastelupäätöksiä useiden antureiden tietojen perusteella ja mahdollistaa asetusten muuttamisen yhdestä paikasta. Tätä simuloidaksesi voit ohjata relettä MQTT:n kautta.
+
+### Tehtävä - ohjaa relettä MQTT:n kautta
+
+1. Lisää asiaankuuluvat MQTT-kirjastot/pip-paketit ja koodi `soil-moisture-sensor`-projektiisi MQTT-yhteyttä varten. Nimeä asiakas-ID `soilmoisturesensor_client`-muotoon, jonka etuliitteenä on oma ID:si.
+
+ > ⚠️ Voit viitata [ohjeisiin MQTT-yhteyden muodostamisesta projektin 1, oppitunnin 4 kohdassa](../../../1-getting-started/lessons/4-connect-internet/README.md#connect-your-iot-device-to-mqtt), jos tarvitset apua.
+
+1. Lisää asiaankuuluva laitekoodi lähettääksesi telemetriatietoja maaperän kosteusasetuksista. Telemetriaviestissä nimeä ominaisuus `soil_moisture`.
+
+ > ⚠️ Voit viitata [ohjeisiin telemetrian lähettämisestä MQTT:hen projektin 1, oppitunnin 4 kohdassa](../../../1-getting-started/lessons/4-connect-internet/README.md#send-telemetry-from-your-iot-device), jos tarvitset apua.
+
+1. Luo paikallinen palvelinkoodi, joka tilaa telemetriatiedot ja lähettää komennon releen ohjaamiseksi kansioon nimeltä `soil-moisture-sensor-server`. Nimeä komento-ominaisuus `relay_on` ja aseta asiakas-ID `soilmoisturesensor_server`-muotoon, jonka etuliitteenä on oma ID:si. Pidä sama rakenne kuin projektin 1, oppitunnin 4 palvelinkoodissa, sillä lisäät tähän koodiin myöhemmin tässä oppitunnissa.
+
+ > ⚠️ Voit viitata [ohjeisiin telemetrian lähettämisestä MQTT:hen](../../../1-getting-started/lessons/4-connect-internet/README.md#write-the-server-code) ja [komentojen lähettämisestä MQTT:n kautta](../../../1-getting-started/lessons/4-connect-internet/README.md#send-commands-to-the-mqtt-broker) projektin 1, oppitunnin 4 kohdassa, jos tarvitset apua.
+
+1. Lisää asiaankuuluva laitekoodi releen ohjaamiseksi vastaanotettujen komentojen perusteella, käyttäen viestin `relay_on`-ominaisuutta. Lähetä `true` `relay_on`-ominaisuudelle, jos `soil_moisture` on suurempi kuin 450, muuten lähetä `false`, samalla logiikalla kuin lisäsit IoT-laitteelle aiemmin.
+
+ > ⚠️ Voit viitata [ohjeisiin MQTT-komentojen käsittelystä IoT-laitteella projektin 1, oppitunnin 4 kohdassa](../../../1-getting-started/lessons/4-connect-internet/README.md#handle-commands-on-the-iot-device), jos tarvitset apua.
+
+> 💁 Löydät tämän koodin [code-mqtt](../../../../../2-farm/lessons/3-automated-plant-watering/code-mqtt)-kansiosta.
+
+Varmista, että koodi toimii laitteellasi ja paikallisella palvelimella, ja testaa sitä muuttamalla maaperän kosteustasoja joko muuttamalla virtuaalianturin lähettämiä arvoja tai lisäämällä vettä maaperään tai poistamalla anturi maaperästä.
+
+## Anturin ja toimilaitteen ajastus
+
+Oppitunnissa 3 rakensit yövalon – LED-valon, joka syttyy heti, kun valotason aleneminen havaitaan valosensorilla. Valosensori havaitsi muutoksen valotasossa välittömästi, ja laite pystyi reagoimaan nopeasti, rajoittuen vain `loop`-funktion tai `while True:`-silmukan viiveeseen. IoT-kehittäjänä et voi aina luottaa näin nopeaan palautesilmukkaan.
+
+### Maaperän kosteuden ajastus
+
+Jos teit edellisen oppitunnin maaperän kosteudesta fyysisellä sensorilla, huomasit, että maaperän kosteuslukeman laskeminen kesti muutaman sekunnin sen jälkeen, kun kastelit kasvia. Tämä ei johdu sensorin hitaudesta, vaan siitä, että veden imeytyminen maaperään vie aikaa.
+💁 Jos kastelit liian lähelle anturia, saatat huomata lukeman laskevan nopeasti ja sitten nousevan takaisin – tämä johtuu siitä, että vesi anturin lähellä leviää muualle maaperään, mikä vähentää anturin havaitsemaa maaperän kosteutta.
+
+
+Yllä olevassa kaaviossa maaperän kosteusmittari näyttää lukeman 658. Kasvia kastellaan, mutta lukema ei muutu heti, koska vesi ei ole vielä saavuttanut anturia. Kastelu voi jopa päättyä ennen kuin vesi saavuttaa anturin ja lukema laskee heijastamaan uutta kosteustasoa.
+
+Jos kirjoittaisit koodia kastelujärjestelmän ohjaamiseen releen avulla maaperän kosteustasojen perusteella, sinun pitäisi ottaa tämä viive huomioon ja rakentaa älykkäämpi ajoitus IoT-laitteeseesi.
+
+✅ Mieti hetki, miten voisit tehdä tämän.
+
+### Ohjaa anturin ja toimilaitteen ajoitusta
+
+Kuvittele, että sinulle on annettu tehtäväksi rakentaa kastelujärjestelmä maatilalle. Maaperän tyypin perusteella ihanteellinen maaperän kosteustaso kasvatettaville kasveille vastaa analogista jännitelukemaa 400-450.
+
+Voisit ohjelmoida laitteen samalla tavalla kuin yövalon - aina kun anturi lukee yli 450, kytke rele päälle ja käynnistä pumppu. Ongelma on, että vesi kestää hetken päästä pumpusta maaperän läpi anturiin. Anturi pysäyttää veden, kun se havaitsee tason 450, mutta veden taso jatkaa laskuaan, kun pumpattu vesi imeytyy maaperään. Lopputuloksena on veden tuhlausta ja juurivaurion riski.
+
+✅ Muista - liiallinen vesi voi olla yhtä haitallista kasveille kuin liian vähäinen, ja se tuhlaa arvokasta resurssia.
+
+Parempi ratkaisu on ymmärtää, että toimilaitteen käynnistämisen ja anturin lukeman muuttumisen välillä on viive. Tämä tarkoittaa, että anturin ei pitäisi vain odottaa hetken ennen kuin se mittaa arvon uudelleen, vaan myös toimilaitteen pitäisi olla pois päältä hetken ennen seuraavaa anturin mittausta.
+
+Kuinka kauan releen pitäisi olla päällä kerrallaan? On parempi olla varovainen ja kytkeä rele päälle vain lyhyeksi ajaksi, odottaa veden imeytymistä ja tarkistaa sitten kosteustasot uudelleen. Loppujen lopuksi voit aina kytkeä sen uudelleen päälle lisätäksesi vettä, mutta et voi poistaa vettä maaperästä.
+
+> 💁 Tällainen ajoituksen hallinta on hyvin spesifistä IoT-laitteelle, jota rakennat, mitattavalle ominaisuudelle sekä käytetyille antureille ja toimilaitteille.
+
+
+
+Esimerkiksi minulla on mansikkakasvi, jossa on maaperän kosteusanturi ja pumppu, jota ohjataan releellä. Olen havainnut, että kun lisään vettä, kestää noin 20 sekuntia, ennen kuin maaperän kosteuslukema vakiintuu. Tämä tarkoittaa, että minun täytyy kytkeä rele pois päältä ja odottaa 20 sekuntia ennen kosteustasojen tarkistamista. Mieluummin liian vähän vettä kuin liikaa - voin aina kytkeä pumpun uudelleen päälle, mutta en voi poistaa vettä kasvista.
+
+
+
+Tämä tarkoittaa, että paras prosessi olisi kastelusykli, joka on jotakuinkin seuraava:
+
+* Käynnistä pumppu 5 sekunniksi
+* Odota 20 sekuntia
+* Tarkista maaperän kosteus
+* Jos taso on edelleen liian korkea, toista yllä olevat vaiheet
+
+5 sekuntia voi olla liian pitkä aika pumpulle, erityisesti jos kosteustasot ovat vain hieman yli vaaditun tason. Paras tapa tietää, mitä ajoitusta käyttää, on kokeilla ja säätää, kun sinulla on anturidataa, jatkuvalla palautesilmukalla. Tämä voi jopa johtaa tarkempaan ajoitukseen, kuten pumpun käynnistämiseen 1 sekunniksi jokaista 100 yli vaaditun maaperän kosteustason sijaan, sen sijaan että käytettäisiin kiinteää 5 sekuntia.
+
+✅ Tee tutkimusta: Onko muita ajoitukseen liittyviä huomioita? Voiko kasvia kastella milloin tahansa, kun maaperän kosteus on liian alhainen, vai onko olemassa tiettyjä vuorokaudenaikoja, jotka ovat hyviä tai huonoja kasteluun?
+
+> 💁 Sääennusteet voidaan myös ottaa huomioon ulkokasvien automaattisten kastelujärjestelmien ohjauksessa. Jos sadetta odotetaan, kastelu voidaan keskeyttää, kunnes sade on ohi. Tällöin maaperä voi olla tarpeeksi kostea, ettei kastelua tarvita, mikä on paljon tehokkaampaa kuin veden tuhlaaminen juuri ennen sadetta.
+
+## Lisää ajoitus kasvien ohjauspalvelimeen
+
+Palvelinkoodia voidaan muokata lisäämään ohjausta kastelusyklin ajoituksen ympärille ja odottamaan maaperän kosteustasojen muuttumista. Palvelimen logiikka releen ajoituksen ohjaamiseksi on:
+
+1. Telemetriaviesti vastaanotettu
+1. Tarkista maaperän kosteustaso
+1. Jos taso on kunnossa, älä tee mitään. Jos lukema on liian korkea (eli maaperän kosteus on liian alhainen), niin:
+ 1. Lähetä komento releen käynnistämiseksi
+ 1. Odota 5 sekuntia
+ 1. Lähetä komento releen sammuttamiseksi
+ 1. Odota 20 sekuntia, jotta maaperän kosteustasot vakiintuvat
+
+Kastelusykli, prosessi telemetriaviestin vastaanottamisesta siihen, että ollaan valmiita käsittelemään maaperän kosteustasoja uudelleen, kestää noin 25 sekuntia. Lähetämme maaperän kosteustasot joka 10 sekunti, joten on päällekkäisyyttä, jossa viesti vastaanotetaan samalla kun palvelin odottaa maaperän kosteustasojen vakiintumista, mikä voisi käynnistää uuden kastelusyklin.
+
+Tämän kiertämiseksi on kaksi vaihtoehtoa:
+
+* Muuta IoT-laitteen koodia lähettämään telemetriaa vain kerran minuutissa, jolloin kastelusykli ehtii valmistua ennen seuraavan viestin lähettämistä
+* Peruuta telemetrian tilaus kastelusyklin aikana
+
+Ensimmäinen vaihtoehto ei aina ole hyvä ratkaisu suurille maatiloille. Viljelijä saattaa haluta tallentaa maaperän kosteustasot kastelun aikana myöhempää analyysiä varten, esimerkiksi ollakseen tietoinen veden virtauksesta eri alueilla tilalla ohjatakseen tarkempaa kastelua. Toinen vaihtoehto on parempi - koodi vain jättää telemetrian huomiotta, kun sitä ei voida käyttää, mutta telemetria on silti olemassa muille palveluille, jotka saattavat tilata sen.
+
+> 💁 IoT-dataa ei lähetetä vain yhdestä laitteesta vain yhdelle palvelulle, vaan monet laitteet voivat lähettää dataa välittäjälle, ja monet palvelut voivat kuunnella dataa välittäjältä. Esimerkiksi yksi palvelu voisi kuunnella maaperän kosteusdataa ja tallentaa sen tietokantaan myöhempää analyysiä varten. Toinen palvelu voi myös kuunnella samaa telemetriaa ohjatakseen kastelujärjestelmää.
+
+### Tehtävä - lisää ajoitus kasvien ohjauspalvelimeen
+
+Päivitä palvelinkoodisi käynnistämään rele 5 sekunniksi ja odottamaan sitten 20 sekuntia.
+
+1. Avaa `soil-moisture-sensor-server`-kansio VS Codessa, jos se ei ole jo auki. Varmista, että virtuaaliympäristö on aktivoitu.
+
+1. Avaa `app.py`-tiedosto
+
+1. Lisää seuraava koodi `app.py`-tiedostoon olemassa olevien tuontien alle:
+
+ ```python
+ import threading
+ ```
+
+ Tämä lause tuo Python-kirjastoista `threading`-moduulin, joka mahdollistaa Pythonin suorittamaan muuta koodia odotuksen aikana.
+
+1. Lisää seuraava koodi ennen `handle_telemetry`-funktiota, joka käsittelee palvelinkoodin vastaanottamia telemetriaviestejä:
+
+ ```python
+ water_time = 5
+ wait_time = 20
+ ```
+
+ Tämä määrittää, kuinka kauan releen tulisi olla päällä (`water_time`) ja kuinka kauan odottaa sen jälkeen kosteustasojen tarkistamista (`wait_time`).
+
+1. Lisää tämän koodin alle seuraava:
+
+ ```python
+ def send_relay_command(client, state):
+ command = { 'relay_on' : state }
+ print("Sending message:", command)
+ client.publish(server_command_topic, json.dumps(command))
+ ```
+
+ Tämä koodi määrittää funktion nimeltä `send_relay_command`, joka lähettää MQTT-komennon releen ohjaamiseksi. Telemetria luodaan sanakirjana ja muunnetaan JSON-merkkijonoksi. `state`-parametri määrittää, pitäisikö releen olla päällä vai pois päältä.
+
+1. Lisää `send_relay_code`-funktion jälkeen seuraava koodi:
+
+ ```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)
+ ```
+
+ Tämä määrittää funktion releen ohjaamiseksi vaaditun ajoituksen perusteella. Se alkaa peruuttamalla telemetrian tilauksen, jotta maaperän kosteustasoviestejä ei käsitellä kastelun aikana. Seuraavaksi se lähettää komennon releen käynnistämiseksi. Sitten se odottaa `water_time`-ajan ennen kuin lähettää komennon releen sammuttamiseksi. Lopuksi se odottaa maaperän kosteustasojen vakiintumista `wait_time` sekuntia. Lopuksi se tilaa telemetrian uudelleen.
+
+1. Muuta `handle_telemetry`-funktio seuraavaksi:
+
+ ```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()
+ ```
+
+ Tämä koodi tarkistaa maaperän kosteustason. Jos se on yli 450, maaperä tarvitsee kastelua, joten se kutsuu `control_relay`-funktion. Tämä funktio suoritetaan erillisessä säikeessä, joka toimii taustalla.
+
+1. Varmista, että IoT-laitteesi on käynnissä, ja suorita tämä koodi. Muuta maaperän kosteustasoja ja tarkkaile, mitä releelle tapahtuu - sen pitäisi käynnistyä 5 sekunniksi ja pysyä pois päältä vähintään 20 sekuntia, käynnistyen vain, jos maaperän kosteustasot eivät ole riittävät.
+
+ ```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}
+ ```
+
+ Hyvä tapa testata tätä simuloidussa kastelujärjestelmässä on käyttää kuivaa maaperää ja kaataa vettä manuaalisesti releen ollessa päällä, lopettaen kaatamisen, kun rele sammuu.
+
+> 💁 Löydät tämän koodin [code-timing](../../../../../2-farm/lessons/3-automated-plant-watering/code-timing)-kansiosta.
+
+> 💁 Jos haluat käyttää pumppua rakentaaksesi oikean kastelujärjestelmän, voit käyttää [6V vesipumppua](https://www.seeedstudio.com/6V-Mini-Water-Pump-p-1945.html) ja [USB-virtalähdettä](https://www.adafruit.com/product/3628). Varmista, että pumpun virta on kytketty releen kautta.
+
+---
+
+## 🚀 Haaste
+
+Voitko keksiä muita IoT- tai sähköisiä laitteita, joissa on samanlainen ongelma, että toimilaitteen vaikutusten saavuttaminen anturiin kestää hetken? Sinulla on todennäköisesti muutama kotona tai koulussa.
+
+* Mitä ominaisuuksia ne mittaavat?
+* Kuinka kauan kestää, että ominaisuus muuttuu toimilaitteen käytön jälkeen?
+* Onko ok, että ominaisuus muuttuu vaaditun arvon ohi?
+* Kuinka se voidaan palauttaa takaisin vaadittuun arvoon, jos tarpeen?
+
+## Luentojälkeinen kysely
+
+[Luentojälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/14)
+
+## Kertaus ja itseopiskelu
+
+* Lue lisää releistä, mukaan lukien niiden historiallinen käyttö puhelinkeskuksissa, [rele Wikipedia-sivulta](https://wikipedia.org/wiki/Relay).
+
+## Tehtävä
+
+[Rakenna tehokkaampi kastelusykli](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/3-automated-plant-watering/assignment.md b/translations/fi/2-farm/lessons/3-automated-plant-watering/assignment.md
new file mode 100644
index 00000000..2130200c
--- /dev/null
+++ b/translations/fi/2-farm/lessons/3-automated-plant-watering/assignment.md
@@ -0,0 +1,54 @@
+
+# Luo tehokkaampi kastelusykli
+
+## Ohjeet
+
+Tässä osiossa käsiteltiin, kuinka relettä voidaan ohjata anturidatan avulla, ja kyseinen rele voi puolestaan ohjata pumppua kastelujärjestelmässä. Määritellylle maaperälle pumpun käyttö tietyn ajan pitäisi aina vaikuttaa samalla tavalla maaperän kosteuteen. Tämä tarkoittaa, että voit arvioida, kuinka monta sekuntia kastelua vastaa tiettyä muutosta maaperän kosteuslukemassa. Tämän datan avulla voit rakentaa hallitumman kastelujärjestelmän.
+
+Tässä tehtävässä lasket, kuinka kauan pumpun tulisi käydä tietyn maaperän kosteuden nousun saavuttamiseksi.
+
+> ⚠️ Jos käytät virtuaalista IoT-laitteistoa, voit käydä läpi tämän prosessin, mutta simuloida tulokset lisäämällä maaperän kosteuslukemaa manuaalisesti kiinteällä määrällä sekuntia kohden, kun rele on päällä.
+
+1. Aloita kuivasta maaperästä. Mittaa maaperän kosteus.
+
+1. Lisää kiinteä määrä vettä joko käyttämällä pumppua 1 sekunnin ajan tai kaatamalla kiinteä määrä vettä.
+
+ > Pumpun tulisi aina toimia tasaisella nopeudella, joten joka sekunti, kun pumppu käy, sen tulisi toimittaa sama määrä vettä.
+
+1. Odota, kunnes maaperän kosteustaso vakiintuu, ja ota lukema.
+
+1. Toista tämä useita kertoja ja luo tuloksista taulukko. Esimerkki tällaisesta taulukosta on annettu alla.
+
+ | Pumpun kokonaisaika | Maaperän kosteus | Muutos |
+ | --- | --: | -: |
+ | Kuiva | 643 | 0 |
+ | 1s | 621 | 22 |
+ | 2s | 601 | 20 |
+ | 3s | 579 | 22 |
+ | 4s | 560 | 19 |
+ | 5s | 539 | 21 |
+ | 6s | 521 | 18 |
+
+1. Laske keskimääräinen maaperän kosteuden muutos sekuntia kohden. Yllä olevassa esimerkissä jokainen sekunti vettä vähentää lukemaa keskimäärin 20,3.
+
+1. Käytä tätä dataa parantaaksesi palvelinkoodisi tehokkuutta, käyttämällä pumppua tarvittavan ajan, jotta maaperän kosteus saadaan halutulle tasolle.
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan |
+| -------- | ----------- | -------- | -------------------- |
+| Maaperän kosteuden mittaus | Osaa ottaa useita lukemia kiinteiden vesimäärien lisäämisen jälkeen | Osaa ottaa joitakin lukemia kiinteiden vesimäärien lisäämisen jälkeen | Osaa ottaa vain yhden tai kaksi lukemaa tai ei osaa käyttää kiinteitä vesimääriä |
+| Palvelinkoodin kalibrointi | Osaa laskea keskimääräisen maaperän kosteuden muutoksen ja päivittää palvelinkoodin käyttämään tätä | Osaa laskea keskimääräisen muutoksen, mutta ei osaa päivittää palvelinkoodia, tai ei osaa laskea keskimääräistä oikein, mutta käyttää tätä arvoa palvelinkoodin päivittämiseen oikein | Ei osaa laskea keskimääräistä muutosta tai päivittää palvelinkoodia |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/3-automated-plant-watering/pi-relay.md b/translations/fi/2-farm/lessons/3-automated-plant-watering/pi-relay.md
new file mode 100644
index 00000000..0ab29a79
--- /dev/null
+++ b/translations/fi/2-farm/lessons/3-automated-plant-watering/pi-relay.md
@@ -0,0 +1,123 @@
+
+# Ohjaa relettä - Raspberry Pi
+
+Tässä oppitunnin osassa lisäät releen Raspberry Pi:hin maankosteusanturin lisäksi ja ohjaat sitä maankosteustason perusteella.
+
+## Laitteisto
+
+Raspberry Pi tarvitsee releen.
+
+Käytettävä rele on [Grove-rele](https://www.seeedstudio.com/Grove-Relay.html), normaalisti avoin rele (eli lähtöpiiri on avoin tai irtikytketty, kun releelle ei lähetetä signaalia), joka kestää jopa 250V ja 10A lähtöpiireissä.
+
+Tämä on digitaalinen toimilaite, joten se liitetään Grove Base Hatin digitaaliseen pinniin.
+
+### Liitä rele
+
+Grove-rele voidaan liittää Raspberry Pi:hin.
+
+#### Tehtävä
+
+Liitä rele.
+
+
+
+1. Työnnä Grove-kaapelin toinen pää releen liittimeen. Se menee sisään vain yhdellä tavalla.
+
+1. Kun Raspberry Pi on sammutettu, liitä Grove-kaapelin toinen pää Grove Base Hatin digitaaliseen liittimeen, joka on merkitty **D5**. Tämä liitin on toinen vasemmalta GPIO-pinnien vieressä olevassa liitinrivissä. Jätä maankosteusanturi liitetyksi **A0**-liittimeen.
+
+
+
+1. Työnnä maankosteusanturi maahan, jos se ei ole jo siellä edellisen oppitunnin jäljiltä.
+
+## Ohjelmoi rele
+
+Nyt Raspberry Pi voidaan ohjelmoida käyttämään liitettyä relettä.
+
+### Tehtävä
+
+Ohjelmoi laite.
+
+1. Käynnistä Pi ja odota, että se käynnistyy.
+
+1. Avaa edellisen oppitunnin `soil-moisture-sensor`-projekti VS Codessa, jos se ei ole jo auki. Lisäät tähän projektiin.
+
+1. Lisää seuraava koodi `app.py`-tiedostoon olemassa olevien tuontien alle:
+
+ ```python
+ from grove.grove_relay import GroveRelay
+ ```
+
+ Tämä lause tuo `GroveRelay`-luokan Grove Python -kirjastoista, jotta voit käyttää Grove-relettä.
+
+1. Lisää seuraava koodi `ADC`-luokan määrittelyn alle luodaksesi `GroveRelay`-instanssin:
+
+ ```python
+ relay = GroveRelay(5)
+ ```
+
+ Tämä luo releen käyttäen pinniä **D5**, digitaalista pinniä, johon liitit releen.
+
+1. Testataksesi, että rele toimii, lisää seuraava koodi `while True:` -silmukkaan:
+
+ ```python
+ relay.on()
+ time.sleep(.5)
+ relay.off()
+ ```
+
+ Koodi kytkee releen päälle, odottaa 0,5 sekuntia ja kytkee sen sitten pois päältä.
+
+1. Suorita Python-sovellus. Rele kytkeytyy päälle ja pois päältä 10 sekunnin välein, puolen sekunnin viiveellä päälle- ja poiskytkennän välillä. Kuuluu releen napsahdus, kun se kytkeytyy päälle ja pois. Grove-laudan LED syttyy, kun rele on päällä, ja sammuu, kun rele on pois päältä.
+
+ 
+
+## Ohjaa relettä maankosteuden perusteella
+
+Nyt kun rele toimii, sitä voidaan ohjata maankosteuslukemien perusteella.
+
+### Tehtävä
+
+Ohjaa relettä.
+
+1. Poista äsken lisäämäsi 3 riviä koodia, joilla testasit relettä. Korvaa ne seuraavalla koodilla:
+
+ ```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()
+ ```
+
+ Tämä koodi tarkistaa maankosteustason maankosteusanturista. Jos taso on yli 450, rele kytketään päälle, ja se kytketään pois päältä, kun taso laskee alle 450.
+
+ > 💁 Muista, että kapasitiivinen maankosteusanturi toimii siten, että mitä alhaisempi maankosteuslukema, sitä kosteampi maa on, ja päinvastoin.
+
+1. Suorita Python-sovellus. Näet releen kytkeytyvän päälle tai pois päältä maankosteustason mukaan. Kokeile kuivassa maassa ja lisää sitten vettä.
+
+ ```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.
+ ```
+
+> 💁 Löydät tämän koodin [code-relay/pi](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/pi) -kansiosta.
+
+😀 Onnittelut! Ohjelmasi, joka ohjaa relettä maankosteusanturin avulla, toimii!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md b/translations/fi/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md
new file mode 100644
index 00000000..93136ab2
--- /dev/null
+++ b/translations/fi/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md
@@ -0,0 +1,127 @@
+
+# Ohjaa relettä - Virtuaalinen IoT-laitteisto
+
+Tässä oppitunnin osassa lisäät releen virtuaaliseen IoT-laitteeseesi maankosteusanturin lisäksi ja ohjaat sitä maankosteustason perusteella.
+
+## Virtuaalinen laitteisto
+
+Virtuaalinen IoT-laite käyttää simuloitua Grove-relettä. Tämä pitää tämän laboratorion samanlaisena kuin fyysisen Grove-releen käyttäminen Raspberry Pi:n kanssa.
+
+Fyysisessä IoT-laitteessa rele olisi normaalisti avoin rele (eli lähtöpiiri on avoin tai irrotettu, kun releelle ei lähetetä signaalia). Tällainen rele voi käsitellä lähtöpiirejä jopa 250V ja 10A asti.
+
+### Lisää rele CounterFit-sovellukseen
+
+Virtuaalisen releen käyttämiseksi sinun täytyy lisätä se CounterFit-sovellukseen.
+
+#### Tehtävä
+
+Lisää rele CounterFit-sovellukseen.
+
+1. Avaa `soil-moisture-sensor`-projekti viime oppitunnilta VS Code:ssa, jos se ei ole jo auki. Tulet lisäämään tähän projektiin.
+
+1. Varmista, että CounterFit-verkkosovellus on käynnissä.
+
+1. Luo rele:
+
+ 1. *Create actuator* -laatikossa *Actuators*-paneelissa, avaa *Actuator type* -valikko ja valitse *Relay*.
+
+ 1. Aseta *Pin* arvoksi *5*.
+
+ 1. Valitse **Add**-painike luodaksesi releen Pin 5:lle.
+
+ 
+
+ Rele luodaan ja se näkyy aktuaattorilistassa.
+
+ 
+
+## Ohjelmoi rele
+
+Maankosteusanturisovellus voidaan nyt ohjelmoida käyttämään virtuaalista relettä.
+
+### Tehtävä
+
+Ohjelmoi virtuaalinen laite.
+
+1. Avaa `soil-moisture-sensor`-projekti viime oppitunnilta VS Code:ssa, jos se ei ole jo auki. Tulet lisäämään tähän projektiin.
+
+1. Lisää seuraava koodi `app.py`-tiedostoon olemassa olevien tuontien alapuolelle:
+
+ ```python
+ from counterfit_shims_grove.grove_relay import GroveRelay
+ ```
+
+ Tämä lause tuo `GroveRelay`-luokan Grove Python -kirjastosta, jotta voidaan käyttää virtuaalista Grove-relettä.
+
+1. Lisää seuraava koodi `ADC`-luokan määrittelyn alapuolelle luodaksesi `GroveRelay`-instanssin:
+
+ ```python
+ relay = GroveRelay(5)
+ ```
+
+ Tämä luo releen käyttäen pinniä **5**, johon rele on kytketty.
+
+1. Testataksesi, että rele toimii, lisää seuraava koodi `while True:`-silmukan sisälle:
+
+ ```python
+ relay.on()
+ time.sleep(.5)
+ relay.off()
+ ```
+
+ Koodi kytkee releen päälle, odottaa 0,5 sekuntia ja kytkee sen pois päältä.
+
+1. Suorita Python-sovellus. Rele kytkeytyy päälle ja pois päältä 10 sekunnin välein, puolen sekunnin viiveellä päälle ja pois päältä kytkemisen välillä. Näet virtuaalisen releen CounterFit-sovelluksessa sulkeutuvan ja avautuvan releen kytkeytyessä päälle ja pois päältä.
+
+ 
+
+## Ohjaa relettä maankosteuden perusteella
+
+Nyt kun rele toimii, sitä voidaan ohjata maankosteuslukemien perusteella.
+
+### Tehtävä
+
+Ohjaa relettä.
+
+1. Poista 3 koodiriviä, jotka lisäsit testataksesi relettä. Korvaa ne seuraavalla koodilla:
+
+ ```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()
+ ```
+
+ Tämä koodi tarkistaa maankosteustason maankosteusanturista. Jos taso on yli 450, se kytkee releen päälle, ja jos taso laskee alle 450, se kytkee releen pois päältä.
+
+ > 💁 Muista, että kapasitiivinen maankosteusanturi lukee: mitä alhaisempi maankosteustaso, sitä enemmän kosteutta maassa on ja päinvastoin.
+
+1. Suorita Python-sovellus. Näet releen kytkeytyvän päälle tai pois päältä maankosteustasojen mukaan. Muuta *Value*- tai *Random*-asetuksia maankosteusanturille nähdäksesi arvon muuttuvan.
+
+ ```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.
+ ```
+
+> 💁 Löydät tämän koodin [code-relay/virtual-device](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/virtual-device) -kansiosta.
+
+😀 Virtuaalinen maankosteusanturi, joka ohjaa relettä, onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md b/translations/fi/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md
new file mode 100644
index 00000000..5bbebd43
--- /dev/null
+++ b/translations/fi/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md
@@ -0,0 +1,25 @@
+
+# Ohjaa relettä - Wio Terminal
+
+Tässä osassa oppituntia lisäät releen Wio Terminal -laitteeseesi maankosteusanturin lisäksi ja ohjaat sitä maankosteustason perusteella.
+
+## Laitteisto
+
+Wio Terminal tarvitsee releen.
+
+Käytettävä rele on [Grove-rele](https://www.seeedstudio.com/Grove-Relay.html), normaalisti avoin rele (eli lähtöpiiri on avoin tai irrotettu, kun releelle ei lähetetä signaalia), joka pystyy käsittelemään lähtöpiirejä jopa 250V ja 10A.
+
+Tämä on digitaalinen toimilaite, joten se liitetään Wio Terminalin digitaalisiin pinneihin. Yhdistetty analoginen/digitaalinen portti on jo käytössä maankosteusanturin kanssa, joten tämä liitetään toiseen porttiin, joka on yhdistetty I
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md b/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md
new file mode 100644
index 00000000..beae5dfb
--- /dev/null
+++ b/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md
@@ -0,0 +1,451 @@
+
+# Siirrä kasvisi pilveen
+
+
+
+> Sketchnote: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+Tämä oppitunti oli osa [IoT for Beginners Project 2 - Digital Agriculture -sarjaa](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx), jonka tuotti [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn).
+
+[](https://youtu.be/bNxjopXkhvk)
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/15)
+
+## Johdanto
+
+Edellisessä oppitunnissa opit yhdistämään kasvisi MQTT-välityspalvelimeen ja ohjaamaan relettä paikallisesti toimivalla palvelinkoodilla. Tämä muodostaa perustan internetiin yhdistetylle automaattiselle kastelujärjestelmälle, jota voidaan käyttää yksittäisistä kotikasveista aina kaupallisiin maatiloihin asti.
+
+IoT-laite kommunikoi julkisen MQTT-välityspalvelimen kanssa periaatteiden havainnollistamiseksi, mutta tämä ei ole luotettavin tai turvallisin tapa. Tässä oppitunnissa opit pilvipalveluista ja IoT-ominaisuuksista, joita julkiset pilvipalvelut tarjoavat. Lisäksi opit, kuinka voit siirtää kasvisi julkisesta MQTT-välityspalvelimesta yhteen näistä pilvipalveluista.
+
+Tässä oppitunnissa käsitellään:
+
+* [Mikä on pilvi?](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud)
+* [Luo pilvitilaus](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud)
+* [Pilven IoT-palvelut](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud)
+* [Luo IoT-palvelu pilvessä](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud)
+* [Kommunikoi IoT Hubin kanssa](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud)
+* [Yhdistä laitteesi IoT-palveluun](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud)
+
+## Mikä on pilvi?
+
+Ennen pilvipalveluita yritykset, jotka halusivat tarjota palveluita työntekijöilleen (esim. tietokantoja tai tiedostojen tallennusta) tai yleisölle (esim. verkkosivustoja), rakensivat ja ylläpitivät omia datakeskuksiaan. Tämä vaihteli pienestä huoneesta, jossa oli muutama tietokone, aina kokonaisiin rakennuksiin, joissa oli satoja tietokoneita. Yritykset vastasivat kaikesta, mukaan lukien:
+
+* Tietokoneiden hankinta
+* Laitteiston ylläpito
+* Sähkö ja jäähdytys
+* Verkkoyhteydet
+* Turvallisuus, mukaan lukien rakennuksen ja ohjelmistojen suojaaminen
+* Ohjelmistojen asennus ja päivitykset
+
+Tämä oli usein erittäin kallista, vaati laajaa osaamista ja oli hidasta muuttaa tarpeiden mukaan. Esimerkiksi, jos verkkokauppa halusi valmistautua kiireiseen joulusesonkiin, sen piti suunnitella kuukausia etukäteen hankkiakseen lisää laitteistoa, konfiguroidakseen sen ja asentaakseen tarvittavat ohjelmistot. Kun sesonki oli ohi ja myynti laski, yritykselle jäi käyttämättömiä tietokoneita odottamaan seuraavaa kiireistä kautta.
+
+✅ Uskotko, että tämä mahdollisti yritysten nopean reagoinnin? Jos esimerkiksi verkkovaateliike nousisi yhtäkkiä suosioon julkkiksen käyttämien vaatteiden ansiosta, pystyisikö se lisäämään laskentatehoaan riittävän nopeasti vastatakseen tilauspiikkiin?
+
+### Jonkun toisen tietokone
+
+Pilveä kutsutaan usein vitsikkäästi "jonkun toisen tietokoneeksi". Alkuperäinen idea oli yksinkertainen – tietokoneiden ostamisen sijaan vuokrataan jonkun toisen tietokone. Pilvipalveluntarjoaja hallinnoi valtavia datakeskuksia ja vastaa kaikesta: laitteiston hankinnasta ja asennuksesta, sähkön ja jäähdytyksen hallinnasta, verkkoyhteyksistä, rakennusten turvallisuudesta sekä laitteiston ja ohjelmistojen päivityksistä. Asiakkaana vuokraat tarvitsemasi tietokoneet, lisäät kapasiteettia kysynnän kasvaessa ja vähennät sitä kysynnän laskiessa. Näitä pilvidatakeskuksia on ympäri maailmaa.
+
+
+
+
+Nämä datakeskukset voivat olla useiden neliökilometrien kokoisia. Yllä olevat kuvat on otettu muutama vuosi sitten Microsoftin pilvidatakeskuksesta, ja ne näyttävät keskuksen alkuperäisen koon sekä suunnitellun laajennuksen. Laajennusta varten raivattu alue on yli 5 neliökilometriä.
+
+> 💁 Nämä datakeskukset kuluttavat niin paljon energiaa, että joillakin on omat voimalaitoksensa. Suuren kokonsa ja pilvipalveluntarjoajien investointien ansiosta ne ovat yleensä erittäin ympäristöystävällisiä. Ne ovat tehokkaampia kuin lukuisat pienet datakeskukset, toimivat pääosin uusiutuvalla energialla, ja pilvipalveluntarjoajat pyrkivät vähentämään jätettä, säästämään vettä ja istuttamaan uusia metsiä korvaamaan rakennustöiden vuoksi kaadetut metsät. Voit lukea lisää pilvipalveluntarjoajien kestävän kehityksen toimista [Azure Sustainability -sivustolta](https://azure.microsoft.com/global-infrastructure/sustainability/?WT.mc_id=academic-17441-jabenn).
+
+✅ Tee tutkimusta: Lue suurista pilvipalveluista, kuten [Microsoftin Azure](https://azure.microsoft.com/?WT.mc_id=academic-17441-jabenn) tai [Googlen GCP](https://cloud.google.com). Kuinka monta datakeskusta niillä on ja missä ne sijaitsevat?
+
+Pilven käyttö alentaa yritysten kustannuksia ja antaa niiden keskittyä ydinosaamiseensa, jättäen pilvipalveluiden asiantuntemuksen palveluntarjoajalle. Yritysten ei enää tarvitse vuokrata tai ostaa datakeskustilaa, maksaa eri palveluntarjoajille yhteyksistä ja sähköstä tai palkata asiantuntijoita. Sen sijaan ne voivat maksaa yhden kuukausilaskun pilvipalveluntarjoajalle, joka huolehtii kaikesta.
+
+Pilvipalveluntarjoajat voivat hyödyntää mittakaavaetuja alentamaan kustannuksia, ostamalla laitteistoa suurissa erissä halvemmalla, investoimalla työkaluihin ylläpitotyön vähentämiseksi ja jopa suunnittelemalla ja rakentamalla omaa laitteistoaan parantaakseen pilvipalveluitaan.
+
+### Microsoft Azure
+
+Azure on Microsoftin kehittäjille suunnattu pilvipalvelu, ja tätä pilvipalvelua käytät näissä oppitunneissa. Alla oleva video antaa lyhyen yleiskatsauksen Azuresta:
+
+[](https://www.microsoft.com/videoplayer/embed/RE4Ibng?WT.mc_id=academic-17441-jabenn)
+
+## Luo pilvitilaus
+
+Jotta voit käyttää pilvipalveluita, sinun on rekisteröidyttävä pilvipalveluntarjoajan tilaukseen. Tässä oppitunnissa rekisteröidyt Microsoft Azuren tilaukseen. Jos sinulla on jo Azure-tilaus, voit ohittaa tämän tehtävän. Alla kuvatut tilausvaihtoehdot ovat ajankohtaisia kirjoitushetkellä, mutta ne voivat muuttua.
+
+> 💁 Jos käytät näitä oppitunteja koulusi kautta, sinulla saattaa jo olla käytössä Azure-tilaus. Tarkista asia opettajaltasi.
+
+On olemassa kaksi erilaista ilmaista Azure-tilausta, joihin voit rekisteröityä:
+
+* **Azure for Students** - Tämä tilaus on suunnattu yli 18-vuotiaille opiskelijoille. Rekisteröitymiseen ei tarvita luottokorttia, ja koulun sähköpostiosoitetta käytetään opiskelijastatuksen vahvistamiseen. Rekisteröityessäsi saat 100 Yhdysvaltain dollaria käytettäväksi pilvipalveluihin sekä ilmaisia palveluita, kuten ilmaisen version IoT-palvelusta. Tämä kestää 12 kuukautta, ja voit uusia sen vuosittain niin kauan kuin olet opiskelija.
+
+* **Azure Free Subscription** - Tämä tilaus on tarkoitettu kaikille, jotka eivät ole opiskelijoita. Rekisteröitymiseen tarvitaan luottokortti, mutta korttia ei veloiteta, vaan sitä käytetään vain henkilöllisyyden vahvistamiseen. Saat 200 dollaria luottoa käytettäväksi ensimmäisten 30 päivän aikana mihin tahansa palveluun sekä ilmaisia Azure-palveluiden tasoja. Kun luotto on käytetty, korttiasi ei veloiteta, ellei tilausta muuteta maksulliseksi.
+
+> 💁 Microsoft tarjoaa myös Azure for Students Starter -tilauksen alle 18-vuotiaille opiskelijoille, mutta kirjoitushetkellä tämä ei tue IoT-palveluita.
+
+### Tehtävä - rekisteröidy ilmaiseen pilvitilaukseen
+
+Jos olet yli 18-vuotias opiskelija, voit rekisteröityä Azure for Students -tilaukseen. Sinun on vahvistettava koulun sähköpostiosoitteesi. Tämä voidaan tehdä kahdella tavalla:
+
+* Rekisteröidy GitHubin opiskelijakehittäjäpakettiin osoitteessa [education.github.com/pack](https://education.github.com/pack). Tämä antaa sinulle pääsyn useisiin työkaluihin ja tarjouksiin, mukaan lukien GitHub ja Microsoft Azure. Kun olet rekisteröitynyt kehittäjäpakettiin, voit aktivoida Azure for Students -tarjouksen.
+
+* Rekisteröidy suoraan Azure for Students -tilaukseen osoitteessa [azure.microsoft.com/free/students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-17441-jabenn).
+
+> ⚠️ Jos koulun sähköpostiosoitettasi ei tunnisteta, luo [ongelma tähän repoihin](https://github.com/Microsoft/IoT-For-Beginners/issues), niin yritämme lisätä sen Azure for Students -sallittujen listalle.
+
+Jos et ole opiskelija tai sinulla ei ole voimassa olevaa koulun sähköpostiosoitetta, voit rekisteröityä Azure Free -tilaukseen.
+
+* Rekisteröidy Azure Free -tilaukseen osoitteessa [azure.microsoft.com/free](https://azure.microsoft.com/free/?WT.mc_id=academic-17441-jabenn)
+
+## Pilven IoT-palvelut
+
+Käyttämäsi julkinen testikäyttöön tarkoitettu MQTT-välityspalvelin on loistava työkalu oppimiseen, mutta sillä on useita haittoja kaupallisessa käytössä:
+
+* Luotettavuus - se on ilmainen palvelu ilman takuita, ja se voidaan sulkea milloin tahansa
+* Turvallisuus - se on julkinen, joten kuka tahansa voi kuunnella telemetriatietojasi tai lähettää komentoja laitteidesi ohjaamiseksi
+* Suorituskyky - se on suunniteltu vain muutamille testiviesteille, joten se ei kestä suurta viestimäärää
+* Löydettävyys - ei ole keinoa tietää, mitkä laitteet ovat yhteydessä
+
+Pilven IoT-palvelut ratkaisevat nämä ongelmat. Niitä ylläpitävät suuret pilvipalveluntarjoajat, jotka investoivat voimakkaasti luotettavuuteen ja ovat valmiina korjaamaan mahdolliset ongelmat. Niissä on sisäänrakennettu turvallisuus, joka estää hakkereita lukemasta tietojasi tai lähettämästä vääriä komentoja. Ne ovat myös erittäin suorituskykyisiä, pystyvät käsittelemään miljoonia viestejä päivittäin ja hyödyntävät pilven skaalautuvuutta tarpeen mukaan.
+
+> 💁 Vaikka näistä eduista maksetaan kuukausimaksu, useimmat pilvipalveluntarjoajat tarjoavat ilmaisen version IoT-palvelustaan, jossa on rajoitettu määrä viestejä päivässä tai laitteita, jotka voivat yhdistää. Tämä ilmainen versio on yleensä enemmän kuin tarpeeksi kehittäjälle palvelun oppimiseen. Tässä oppitunnissa käytät ilmaista versiota.
+
+IoT-laitteet yhdistävät pilvipalveluun joko laite-SDK:n (kirjasto, joka tarjoaa koodia palvelun ominaisuuksien hyödyntämiseen) avulla tai suoraan viestintäprotokollan, kuten MQTT:n tai HTTP:n, kautta. Laite-SDK on yleensä helpoin tapa, koska se hoitaa kaiken puolestasi, kuten tietää, mitä aiheita julkaista tai tilata, ja miten käsitellä turvallisuutta.
+
+
+
+Laitteesi kommunikoi sitten sovelluksesi muiden osien kanssa tämän palvelun kautta – samalla tavalla kuin lähetit telemetriatietoja ja vastaanotit komentoja MQTT:n kautta. Tämä tapahtuu yleensä palvelu-SDK:n tai vastaavan kirjaston avulla. Viestit tulevat laitteeltasi palveluun, jossa sovelluksesi muut osat voivat lukea ne, ja viestit voidaan lähettää takaisin laitteellesi.
+
+
+
+Nämä palvelut toteuttavat turvallisuuden tietämällä kaikista laitteista, jotka voivat yhdistää ja lähettää tietoja, joko rekisteröimällä laitteet etukäteen palveluun tai antamalla laitteille salaisia avaimia tai varmenteita, joita ne voivat käyttää rekisteröityessään palveluun ensimmäistä kertaa. Tuntemattomat laitteet eivät voi yhdistää; jos ne yrittävät, palvelu hylkää yhteyden ja jättää niiden lähettämät viestit huomiotta.
+
+✅ Tee tutkimusta: Mitä haittoja on avoimessa IoT-palvelussa, johon mikä tahansa laite tai koodi voi yhdistää? Löydätkö esimerkkejä hakkereista, jotka ovat hyödyntäneet tällaisia palveluita?
+
+Sovelluksesi muut osat voivat yhdistää IoT-palveluun ja saada tietoa kaikista yhdistetyistä tai rekisteröidyistä laitteista sekä kommunikoida niiden kanssa suoraan joko yksittäin tai massana.
+💁 IoT-palvelut toteuttavat myös lisäominaisuuksia, ja pilvipalveluntarjoajilla on lisäpalveluita ja sovelluksia, jotka voidaan yhdistää palveluun. Esimerkiksi, jos haluat tallentaa kaikki laitteiden lähettämät telemetriaviestit tietokantaan, pilvipalveluntarjoajan asetustyökalussa on yleensä vain muutama klikkaus, jotta palvelu voidaan yhdistää tietokantaan ja dataa voidaan alkaa siirtää sinne.
+## Luo IoT-palvelu pilveen
+
+Nyt kun sinulla on Azure-tilaus, voit rekisteröityä IoT-palveluun. Microsoftin IoT-palvelu tunnetaan nimellä Azure IoT Hub.
+
+
+
+Alla oleva video antaa lyhyen yleiskatsauksen Azure IoT Hubista:
+
+[](https://www.youtube.com/watch?v=smuZaZZXKsU)
+
+> 🎥 Klikkaa yllä olevaa kuvaa katsoaksesi videon
+
+✅ Käytä hetki aikaa tutkiaksesi ja lue IoT Hubin yleiskatsaus [Microsoft IoT Hub -dokumentaatiosta](https://docs.microsoft.com/azure/iot-hub/about-iot-hub?WT.mc_id=academic-17441-jabenn).
+
+Azure-pilvipalvelut voidaan määrittää joko verkkopohjaisen portaalin kautta tai komentorivikäyttöliittymän (CLI) avulla. Tässä tehtävässä käytät CLI:tä.
+
+### Tehtävä - asenna Azure CLI
+
+Jotta voit käyttää Azure CLI:tä, se on ensin asennettava tietokoneellesi tai Macillesi.
+
+1. Seuraa ohjeita [Azure CLI -dokumentaatiossa](https://docs.microsoft.com/cli/azure/install-azure-cli?WT.mc_id=academic-17441-jabenn) asentaaksesi CLI:n.
+
+1. Azure CLI tukee useita laajennuksia, jotka lisäävät ominaisuuksia monenlaisten Azure-palveluiden hallintaan. Asenna IoT-laajennus suorittamalla seuraava komento komentoriviltäsi tai terminaalistasi:
+
+ ```sh
+ az extension add --name azure-iot
+ ```
+
+1. Suorita seuraava komento komentoriviltäsi tai terminaalistasi kirjautuaksesi Azure-tilaukseesi Azure CLI:n kautta.
+
+ ```sh
+ az login
+ ```
+
+ Oletusselaimessasi avautuu verkkosivu. Kirjaudu sisään käyttämällä tiliä, jolla rekisteröidyit Azure-tilaukseen. Kun olet kirjautunut sisään, voit sulkea selainvälilehden.
+
+1. Jos sinulla on useita Azure-tilauksia, kuten koulun tarjoama ja oma Azure for Students -tilaus, sinun on valittava, mitä haluat käyttää. Suorita seuraava komento nähdäksesi kaikki tilaukset, joihin sinulla on pääsy:
+
+ ```sh
+ az account list --output table
+ ```
+
+ Tulosteessa näet jokaisen tilauksen nimen ja sen `SubscriptionId`-tunnuksen.
+
+ ```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
+ ```
+
+ Valitse haluamasi tilaus seuraavalla komennolla:
+
+ ```sh
+ az account set --subscription
+ ```
+
+ Korvaa `` sen tilauksen tunnuksella, jota haluat käyttää. Suoritettuasi tämän komennon, suorita komento uudelleen nähdäksesi tilisi. Näet, että `IsDefault`-sarake on merkitty `True`:ksi valitsemallesi tilaukselle.
+
+### Tehtävä - luo resurssiryhmä
+
+Azure-palvelut, kuten IoT Hub -instanssit, virtuaalikoneet, tietokannat tai tekoälypalvelut, tunnetaan nimellä **resurssit**. Jokaisen resurssin on kuuluttava **resurssiryhmään**, joka on looginen ryhmä yhdelle tai useammalle resurssille.
+
+> 💁 Resurssiryhmien käyttö mahdollistaa useiden palveluiden hallinnan kerralla. Esimerkiksi, kun olet suorittanut kaikki tämän projektin oppitunnit, voit poistaa resurssiryhmän, jolloin kaikki sen sisältämät resurssit poistetaan automaattisesti.
+
+1. Azurella on useita datakeskuksia ympäri maailmaa, ja ne on jaettu alueisiin. Kun luot Azure-resurssin tai resurssiryhmän, sinun on määritettävä, mihin haluat sen luotavan. Suorita seuraava komento saadaksesi luettelon sijainneista:
+
+ ```sh
+ az account list-locations --output table
+ ```
+
+ Näet pitkän luettelon sijainneista.
+
+ > 💁 Tämän kirjoitushetkellä on 65 sijaintia, joihin voit sijoittaa resursseja.
+
+ ```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
+ ...
+ ```
+
+ Kirjoita muistiin lähimmän alueen `Name`-sarakkeen arvo. Voit tarkastella alueita kartalla [Azure geographies -sivulla](https://azure.microsoft.com/global-infrastructure/geographies/?WT.mc_id=academic-17441-jabenn).
+
+1. Suorita seuraava komento luodaksesi resurssiryhmän nimeltä `soil-moisture-sensor`. Resurssiryhmän nimien on oltava yksilöllisiä tilauksessasi.
+
+ ```sh
+ az group create --name soil-moisture-sensor \
+ --location
+ ```
+
+ Korvaa `` valitsemallasi sijainnilla edellisessä vaiheessa.
+
+### Tehtävä - luo IoT Hub
+
+Nyt voit luoda IoT Hub -resurssin resurssiryhmääsi.
+
+1. Käytä seuraavaa komentoa luodaksesi IoT Hub -resurssisi:
+
+ ```sh
+ az iot hub create --resource-group soil-moisture-sensor \
+ --sku F1 \
+ --partition-count 2 \
+ --name
+ ```
+
+ Korvaa `` hubillesi valitsemallasi nimellä. Nimen on oltava maailmanlaajuisesti yksilöllinen – toisin sanoen, mikään muu IoT Hub ei voi käyttää samaa nimeä. Tätä nimeä käytetään URL-osoitteessa, joka osoittaa hubiin, joten sen on oltava ainutlaatuinen. Käytä esimerkiksi `soil-moisture-sensor-` ja lisää loppuun yksilöllinen tunniste, kuten satunnaisia sanoja tai nimesi.
+
+ `--sku F1` -vaihtoehto määrittää ilmaisen tason käytettäväksi. Ilmainen taso tukee 8 000 viestiä päivässä ja sisältää suurimman osan maksullisten tasojen ominaisuuksista.
+
+ > 🎓 Eri Azure-palveluiden hinnoittelutasot tunnetaan nimellä tierit. Jokaisella tasolla on eri kustannukset ja ne tarjoavat erilaisia ominaisuuksia tai datamääriä.
+
+ > 💁 Jos haluat oppia lisää hinnoittelusta, voit tutustua [Azure IoT Hub -hinnoitteluoppaaseen](https://azure.microsoft.com/pricing/details/iot-hub/?WT.mc_id=academic-17441-jabenn).
+
+ `--partition-count 2` -vaihtoehto määrittää, kuinka monta datavirtaa IoT Hub tukee. Useammat osiot vähentävät datan tukkeutumista, kun useat tahot lukevat ja kirjoittavat IoT Hubiin. Osioiden käsittely on tämän oppitunnin ulkopuolella, mutta tämä arvo on asetettava ilmaisen tason IoT Hubin luomiseksi.
+
+ > 💁 Voit luoda vain yhden ilmaisen tason IoT Hubin per tilaus.
+
+IoT Hub luodaan. Tämä voi kestää minuutin tai kaksi.
+
+## Kommunikoi IoT Hubin kanssa
+
+Edellisessä oppitunnissa käytit MQTT:tä ja lähetit viestejä eri aiheisiin, joilla oli eri tarkoituksia. Sen sijaan, että viestit lähetettäisiin eri aiheiden kautta, IoT Hubilla on useita määriteltyjä tapoja, joilla laite voi kommunikoida hubin kanssa tai hubi laitteen kanssa.
+
+> 💁 IoT Hubin ja laitteen välinen viestintä voi käyttää taustalla MQTT:tä, HTTPS:ää tai AMQP:tä.
+
+* Laitteesta pilveen (D2C) -viestit – nämä ovat viestejä, jotka lähetetään laitteesta IoT Hubiin, kuten telemetriatietoja. Sovelluskoodisi voi lukea ne IoT Hubista.
+
+ > 🎓 Taustalla IoT Hub käyttää Azure-palvelua nimeltä [Event Hubs](https://docs.microsoft.com/azure/event-hubs/?WT.mc_id=academic-17441-jabenn). Kun kirjoitat koodia lukemaan hubiin lähetettyjä viestejä, niitä kutsutaan usein tapahtumiksi.
+
+* Pilvestä laitteeseen (C2D) -viestit – nämä ovat viestejä, jotka lähetetään sovelluskoodista IoT Hubin kautta IoT-laitteelle.
+
+* Suorat metodipyynnöt – nämä ovat viestejä, jotka lähetetään sovelluskoodista IoT Hubin kautta IoT-laitteelle pyytämään laitteen suorittamaan jokin toiminto, kuten aktuaattorin ohjaaminen. Näihin viesteihin vaaditaan vastaus, jotta sovelluskoodi voi varmistaa, että pyyntö käsiteltiin onnistuneesti.
+
+* Laitetwin – nämä ovat JSON-dokumentteja, jotka synkronoidaan laitteen ja IoT Hubin välillä. Niitä käytetään tallentamaan asetuksia tai muita ominaisuuksia, jotka joko laite raportoi tai jotka IoT Hubin tulisi asettaa laitteelle (kutsutaan halutuiksi ominaisuuksiksi).
+
+IoT Hub voi tallentaa viestejä ja suoria metodipyyntöjä määritettävissä olevan ajan (oletuksena yksi päivä), joten jos laite tai sovelluskoodi menettää yhteyden, se voi silti noutaa viestit, jotka lähetettiin sen ollessa offline-tilassa, kun se yhdistää uudelleen. Laitetwin tallennetaan pysyvästi IoT Hubiin, joten laite voi milloin tahansa yhdistää uudelleen ja saada viimeisimmän laitetwinin.
+
+✅ Tee tutkimusta: Lue lisää näistä viestityypeistä [Laitteesta pilveen -viestintäohjeista](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-d2c-guidance?WT.mc_id=academic-17441-jabenn) ja [Pilvestä laitteeseen -viestintäohjeista](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-c2d-guidance?WT.mc_id=academic-17441-jabenn) IoT Hub -dokumentaatiossa.
+
+## Yhdistä laitteesi IoT-palveluun
+
+Kun hubi on luotu, IoT-laitteesi voi yhdistää siihen. Vain rekisteröidyt laitteet voivat yhdistää palveluun, joten sinun on ensin rekisteröitävä laitteesi. Rekisteröinnin yhteydessä saat yhteysmerkkijonon, jota laite voi käyttää yhdistämiseen. Tämä yhteysmerkkijono on laitekohtainen ja sisältää tietoja IoT Hubista, laitteesta ja salaisen avaimen, joka mahdollistaa laitteen yhdistämisen.
+
+> 🎓 Yhteysmerkkijono on yleinen termi tekstille, joka sisältää yhteystiedot. Näitä käytetään yhdistettäessä IoT Hubeihin, tietokantoihin ja moniin muihin palveluihin. Ne sisältävät yleensä palvelun tunnisteen, kuten URL-osoitteen, ja turvallisuustiedot, kuten salaisen avaimen. Näitä välitetään SDK:ille palveluun yhdistämistä varten.
+
+> ⚠️ Yhteysmerkkijonot on pidettävä turvassa! Turvallisuutta käsitellään tarkemmin tulevassa oppitunnissa.
+
+### Tehtävä - rekisteröi IoT-laitteesi
+
+IoT-laite voidaan rekisteröidä IoT Hubiisi Azure CLI:n avulla.
+
+1. Suorita seuraava komento rekisteröidäksesi laitteen:
+
+ ```sh
+ az iot hub device-identity create --device-id soil-moisture-sensor \
+ --hub-name
+ ```
+
+ Korvaa `` IoT Hubillesi valitsemallasi nimellä.
+
+ Tämä luo laitteen, jonka tunnus on `soil-moisture-sensor`.
+
+1. Kun IoT-laitteesi yhdistää IoT Hubiisi SDK:n avulla, sen on käytettävä yhteysmerkkijonoa, joka antaa hubin URL-osoitteen ja salaisen avaimen. Suorita seuraava komento saadaksesi yhteysmerkkijonon:
+
+ ```sh
+ az iot hub device-identity connection-string show --device-id soil-moisture-sensor \
+ --output table \
+ --hub-name
+ ```
+
+ Korvaa `` IoT Hubillesi valitsemallasi nimellä.
+
+1. Tallenna tulosteessa näkyvä yhteysmerkkijono, sillä tarvitset sitä myöhemmin.
+
+### Tehtävä - yhdistä IoT-laitteesi pilveen
+
+Käy läpi asiaankuuluva opas yhdistääksesi IoT-laitteesi pilveen:
+
+* [Arduino - Wio Terminal](wio-terminal-connect-hub.md)
+* [Yksikorttitietokone - Raspberry Pi/virtuaalinen IoT-laite](single-board-computer-connect-hub.md)
+
+### Tehtävä - seuraa tapahtumia
+
+Tällä hetkellä et päivitä palvelinkoodiasi. Sen sijaan voit käyttää Azure CLI:tä seurataksesi IoT-laitteesi lähettämiä tapahtumia.
+
+1. Varmista, että IoT-laitteesi on käynnissä ja lähettää maaperän kosteuden telemetriatietoja.
+
+1. Suorita seuraava komento komentorivilläsi tai terminaalissasi seurataksesi IoT-laitteesi IoT Hubiin lähettämiä viestejä:
+
+ ```sh
+ az iot hub monitor-events --hub-name
+ ```
+
+ Korvaa `` IoT Hubillesi valitsemallasi nimellä.
+
+ Näet viestit ilmestyvän konsolin tulosteeseen sitä mukaa, kun IoT-laitteesi lähettää niitä.
+
+ ```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`-sisältö vastaa IoT-laitteesi lähettämää viestiä.
+
+ > Tämän kirjoitushetkellä `az iot` -laajennus ei toimi täysin Apple Silicon -laitteilla. Jos käytät Apple Silicon -laitetta, sinun on seurattava viestejä eri tavalla, esimerkiksi käyttämällä [Azure IoT Tools for Visual Studio Code](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-vscode-iot-toolkit-cloud-device-messaging).
+
+1. Näillä viesteillä on automaattisesti liitettynä useita ominaisuuksia, kuten aikaleima, jolloin ne lähetettiin. Näitä kutsutaan *annotaatioiksi*. Näytä kaikki viestien annotaatiot seuraavalla komennolla:
+
+ ```sh
+ az iot hub monitor-events --properties anno --hub-name
+ ```
+
+ Korvaa `` IoT Hubillesi valitsemallasi nimellä.
+
+ Näet viestit ilmestyvän konsolin tulosteeseen sitä mukaa, kun IoT-laitteesi lähettää niitä.
+
+ ```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}"
+ }
+ }
+ ```
+
+ Aika-arvot annotaatioissa ovat [UNIX-aikaa](https://wikipedia.org/wiki/Unix_time), joka edustaa sekuntien määrää keskiyöstä 1. tammikuuta 1970 alkaen.
+
+ Poistu tapahtumien seurannasta, kun olet valmis.
+
+### Tehtävä - ohjaa IoT-laitettasi
+
+Voit myös käyttää Azure CLI:tä kutsuaksesi suoria metodeja IoT-laitteellasi.
+
+1. Suorita seuraava komento komentorivilläsi tai terminaalissasi kutsuaksesi `relay_on`-metodia IoT-laitteellasi:
+
+ ```sh
+ az iot hub invoke-device-method --device-id soil-moisture-sensor \
+ --method-name relay_on \
+ --method-payload '{}' \
+ --hub-name
+ ```
+
+ Korvaa `
+
+` käytä IoT Hubille antamaasi nimeä.
+
+ Tämä lähettää suoran metodipyynnön määritetylle metodille `method-name`. Suorat metodit voivat sisältää hyötykuorman, joka sisältää dataa metodille, ja tämä voidaan määrittää `method-payload`-parametrissa JSON-muodossa.
+
+ Näet releen kytkeytyvän päälle ja vastaavan tulosteen IoT-laitteeltasi:
+
+ ```output
+ Direct method received - relay_on
+ ```
+
+1. Toista yllä oleva vaihe, mutta aseta `--method-name` arvoksi `relay_off`. Näet releen kytkeytyvän pois päältä ja vastaavan tulosteen IoT-laitteelta.
+
+---
+
+## 🚀 Haaste
+
+IoT Hubin ilmaisversio sallii 8 000 viestiä päivässä. Kirjoittamasi koodi lähettää telemetriaviestejä joka 10. sekunti. Kuinka monta viestiä päivässä syntyy, jos viesti lähetetään joka 10. sekunti?
+
+Mieti, kuinka usein maaperän kosteuden mittaukset tulisi lähettää? Kuinka voit muuttaa koodiasi pysyäksesi ilmaisversion rajoissa ja tarkistaa kosteuden tarpeeksi usein mutta ei liian usein? Entä jos haluaisit lisätä toisen laitteen?
+
+## Luentojälkeinen kysely
+
+[Luentojälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/16)
+
+## Kertaus & Itseopiskelu
+
+IoT Hub SDK on avoimen lähdekoodin ratkaisu sekä Arduinolle että Pythonille. GitHubin koodivarastoista löytyy useita esimerkkejä, jotka näyttävät, kuinka työskennellä eri IoT Hub -ominaisuuksien kanssa.
+
+* Jos käytät Wio Terminalia, tutustu [Arduinon esimerkkeihin GitHubissa](https://github.com/Azure/azure-iot-pal-arduino/tree/master/pal/samples)
+* Jos käytät Raspberry Pi:tä tai virtuaalilaitetta, tutustu [Pythonin esimerkkeihin GitHubissa](https://github.com/Azure/azure-iot-sdk-python/tree/master/azure-iot-hub/samples)
+
+## Tehtävä
+
+[Lisätietoa pilvipalveluista](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md b/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md
new file mode 100644
index 00000000..31deb0e9
--- /dev/null
+++ b/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md
@@ -0,0 +1,33 @@
+
+# Opi pilvipalveluista
+
+## Ohjeet
+
+Pilvipalvelut, kuten Microsoftin Azure, tarjoavat paljon muutakin kuin vain vuokrattavia laskentatehoja. Tärkeimmät pilvipalvelutarjonnan tyypit ovat:
+
+* Infrastruktuuri palveluna (IaaS)
+* Alusta palveluna (PaaS)
+* Palvelimettomuus
+* Ohjelmisto palveluna (SaaS)
+
+Tutustu näihin erilaisiin palvelutyyppeihin ja selitä, mitä ne ovat ja miten ne eroavat toisistaan. Selitä myös, mitkä palvelut ovat merkityksellisiä IoT-kehittäjille.
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannettavaa |
+| -------- | ----------- | -------- | ------------- |
+| Eri pilvipalveluiden selittäminen | Annettu selkeät selitykset kaikista neljästä palvelutyypistä | Pystyttiin selittämään kolme palvelutyyppiä | Pystyttiin selittämään vain yksi tai kaksi palvelutyyppiä |
+| IoT:lle merkityksellisten palveluiden selittäminen | Kuvailtu, mitkä palvelut ovat merkityksellisiä IoT-kehittäjille ja miksi | Kuvailtu, mitkä palvelut ovat merkityksellisiä IoT-kehittäjille, mutta ei miksi | Ei pystytty kuvailemaan, mitkä palvelut ovat merkityksellisiä IoT-kehittäjille |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md b/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md
new file mode 100644
index 00000000..4fdc5042
--- /dev/null
+++ b/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md
@@ -0,0 +1,130 @@
+
+# Yhdistä IoT-laitteesi pilveen - Virtuaalinen IoT-laitteisto ja Raspberry Pi
+
+Tässä oppitunnin osassa yhdistät virtuaalisen IoT-laitteesi tai Raspberry Pi:n IoT Hubiin, jotta voit lähettää telemetriatietoja ja vastaanottaa komentoja.
+
+## Yhdistä laite IoT Hubiin
+
+Seuraava vaihe on yhdistää laite IoT Hubiin.
+
+### Tehtävä - yhdistä IoT Hubiin
+
+1. Avaa `soil-moisture-sensor`-kansio VS Codessa. Varmista, että virtuaalinen ympäristö on käynnissä terminaalissa, jos käytät virtuaalista IoT-laitetta.
+
+1. Asenna joitakin lisäpaketteja Pipin avulla:
+
+ ```sh
+ pip3 install azure-iot-device
+ ```
+
+ `azure-iot-device` on kirjasto, joka mahdollistaa kommunikoinnin IoT Hubin kanssa.
+
+1. Lisää seuraavat tuontilauseet `app.py`-tiedoston alkuun, olemassa olevien tuontien alapuolelle:
+
+ ```python
+ from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
+ ```
+
+ Tämä koodi tuo SDK:n, joka mahdollistaa kommunikoinnin IoT Hubin kanssa.
+
+1. Poista `import paho.mqtt.client as mqtt` -rivi, sillä tätä kirjastoa ei enää tarvita. Poista kaikki MQTT-koodi, mukaan lukien aiheen nimet, kaikki koodi, joka käyttää `mqtt_client`-objektia, sekä `handle_command`. Säilytä `while True:` -silmukka, mutta poista `mqtt_client.publish` -rivi tästä silmukasta.
+
+1. Lisää seuraava koodi tuontilauseiden alapuolelle:
+
+ ```python
+ connection_string = ""
+ ```
+
+ Korvaa `` yhteysmerkkijonolla, jonka hankit laitteelle aiemmin tässä oppitunnissa.
+
+ > 💁 Tämä ei ole paras käytäntö. Yhteysmerkkijonoja ei koskaan pitäisi tallentaa lähdekoodiin, sillä ne voivat päätyä versionhallintaan ja olla kaikkien saatavilla. Teemme näin yksinkertaisuuden vuoksi. Ihanteellisesti sinun tulisi käyttää esimerkiksi ympäristömuuttujaa ja työkalua kuten [`python-dotenv`](https://pypi.org/project/python-dotenv/). Opit tästä lisää tulevassa oppitunnissa.
+
+1. Lisää tämän koodin alapuolelle seuraava koodi, joka luo laiteasiakasobjektin IoT Hubin kanssa kommunikointia varten ja yhdistää sen:
+
+ ```python
+ device_client = IoTHubDeviceClient.create_from_connection_string(connection_string)
+
+ print('Connecting')
+ device_client.connect()
+ print('Connected')
+ ```
+
+1. Suorita tämä koodi. Näet laitteen yhdistyvän.
+
+ ```output
+ pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py
+ Connecting
+ Connected
+ Soil moisture: 379
+ ```
+
+## Lähetä telemetriatietoja
+
+Nyt kun laite on yhdistetty, voit lähettää telemetriatietoja IoT Hubiin MQTT-välittäjän sijaan.
+
+### Tehtävä - lähetä telemetriatietoja
+
+1. Lisää seuraava koodi `while True` -silmukan sisään, juuri ennen `sleep`-komentoa:
+
+ ```python
+ message = Message(json.dumps({ 'soil_moisture': soil_moisture }))
+ device_client.send_message(message)
+ ```
+
+ Tämä koodi luo IoT Hubin `Message`-objektin, joka sisältää maaperän kosteuden lukeman JSON-merkkijonona, ja lähettää sen IoT Hubiin laitteesta pilveen -viestinä.
+
+## Käsittele komentoja
+
+Laitteesi täytyy käsitellä palvelinkoodista tuleva komento releen ohjaamiseksi. Tämä lähetetään suoran metodipyynnön muodossa.
+
+## Tehtävä - käsittele suora metodipyyntö
+
+1. Lisää seuraava koodi ennen `while True` -silmukkaa:
+
+ ```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()
+ ```
+
+ Tämä määrittää metodin, `handle_method_request`, joka kutsutaan, kun IoT Hub lähettää suoran metodipyynnön. Jokaisella suoralla metodilla on nimi, ja tämä koodi odottaa metodeja nimeltä `relay_on` releen kytkemiseksi päälle ja `relay_off` releen kytkemiseksi pois päältä.
+
+ > 💁 Tämä voitaisiin toteuttaa myös yhdellä suoralla metodipyynnöllä, jossa haluttu releen tila välitetään metodipyynnön mukana ja on saatavilla `request`-objektista.
+
+1. Suorat metodit vaativat vastauksen, joka kertoo kutsuvalle koodille, että ne on käsitelty. Lisää seuraava koodi `handle_method_request`-funktion loppuun, jotta voit luoda vastauksen pyyntöön:
+
+ ```python
+ method_response = MethodResponse.create_from_method_request(request, 200)
+ device_client.send_method_response(method_response)
+ ```
+
+ Tämä koodi lähettää vastauksen suoraan metodipyyntöön HTTP-tilakoodilla 200 ja palauttaa sen IoT Hubiin.
+
+1. Lisää seuraava koodi tämän funktion määrittelyn alapuolelle:
+
+ ```python
+ device_client.on_method_request_received = handle_method_request
+ ```
+
+ Tämä koodi kertoo IoT Hub -asiakasobjektille, että sen tulee kutsua `handle_method_request`-funktiota, kun suora metodi kutsutaan.
+
+> 💁 Löydät tämän koodin [code/pi](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/pi)- tai [code/virtual-device](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/virtual-device)-kansiosta.
+
+😀 Maaperän kosteusanturin ohjelma on yhdistetty IoT Hubiin!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md b/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md
new file mode 100644
index 00000000..38908e0c
--- /dev/null
+++ b/translations/fi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md
@@ -0,0 +1,306 @@
+
+# Yhdistä IoT-laitteesi pilveen - Wio Terminal
+
+Tässä osassa oppituntia yhdistät Wio Terminal -laitteesi IoT Hubiin, jotta voit lähettää telemetriatietoja ja vastaanottaa komentoja.
+
+## Yhdistä laite IoT Hubiin
+
+Seuraava vaihe on yhdistää laite IoT Hubiin.
+
+### Tehtävä - yhdistäminen IoT Hubiin
+
+1. Avaa `soil-moisture-sensor`-projekti VS Codessa.
+
+1. Avaa `platformio.ini`-tiedosto. Poista `knolleary/PubSubClient`-kirjastoriippuvuus. Tätä käytettiin yhteyden muodostamiseen julkiseen MQTT-välittäjään, mutta sitä ei tarvita IoT Hubiin yhdistämisessä.
+
+1. Lisää seuraavat kirjastoriippuvuudet:
+
+ ```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`-kirjasto tarjoaa koodin reaaliaikaisen kellon käyttöön Wio Terminalissa, jota käytetään ajan seuraamiseen. Loput kirjastot mahdollistavat IoT-laitteen yhdistämisen IoT Hubiin.
+
+1. Lisää seuraava `platformio.ini`-tiedoston loppuun:
+
+ ```ini
+ build_flags =
+ -DDONT_USE_UPLOADTOBLOB
+ ```
+
+ Tämä asettaa kääntäjän lipun, joka tarvitaan Arduino IoT Hub -koodin kääntämisessä.
+
+1. Avaa `config.h`-otsikkotiedosto. Poista kaikki MQTT-asetukset ja lisää seuraava vakio laitteen yhteysmerkkijonolle:
+
+ ```cpp
+ // IoT Hub settings
+ const char *CONNECTION_STRING = "";
+ ```
+
+ Korvaa `` laitteen aiemmin kopioimallasi yhteysmerkkijonolla.
+
+1. Yhteys IoT Hubiin käyttää aikaan perustuvaa tunnistetta. Tämä tarkoittaa, että IoT-laitteen täytyy tietää nykyinen aika. Toisin kuin käyttöjärjestelmät kuten Windows, macOS tai Linux, mikrokontrollerit eivät automaattisesti synkronoi nykyistä aikaa Internetin kautta. Tämä tarkoittaa, että sinun täytyy lisätä koodi, joka hakee nykyisen ajan [NTP](https://wikipedia.org/wiki/Network_Time_Protocol)-palvelimelta. Kun aika on haettu, se voidaan tallentaa reaaliaikakelloon Wio Terminalissa, jolloin oikea aika voidaan pyytää myöhemmin, olettaen että laite ei menetä virtaa. Lisää uusi tiedosto nimeltä `ntp.h` seuraavalla koodilla:
+
+ ```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);
+ }
+ ```
+
+ Tämän koodin yksityiskohdat ovat oppitunnin ulkopuolella. Se määrittää funktion nimeltä `initTime`, joka hakee nykyisen ajan NTP-palvelimelta ja käyttää sitä Wio Terminalin kellon asettamiseen.
+
+1. Avaa `main.cpp`-tiedosto ja poista kaikki MQTT-koodi, mukaan lukien `PubSubClient.h`-otsikkotiedosto, `PubSubClient`-muuttujan määrittely, `reconnectMQTTClient`- ja `createMQTTClient`-metodit sekä kaikki kutsut näihin muuttujiin ja metodeihin. Tiedoston tulisi sisältää vain koodi WiFi-yhteyden muodostamiseen, maaperän kosteuden hakemiseen ja JSON-dokumentin luomiseen siitä.
+
+1. Lisää seuraavat `#include`-direktiivit `main.cpp`-tiedoston alkuun IoT Hub -kirjastojen ja ajan asettamisen otsikkotiedostojen sisällyttämiseksi:
+
+ ```cpp
+ #include
+ #include
+ #include
+ #include "ntp.h"
+ ```
+
+1. Lisää seuraava kutsu `setup`-funktion loppuun nykyisen ajan asettamiseksi:
+
+ ```cpp
+ initTime();
+ ```
+
+1. Lisää seuraava muuttujan määrittely tiedoston alkuun, juuri sisällytysdirektiivien alapuolelle:
+
+ ```cpp
+ IOTHUB_DEVICE_CLIENT_LL_HANDLE _device_ll_handle;
+ ```
+
+ Tämä määrittää `IOTHUB_DEVICE_CLIENT_LL_HANDLE`-muuttujan, joka toimii yhteytenä IoT Hubiin.
+
+1. Lisää tämän alapuolelle seuraava koodi:
+
+ ```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");
+ }
+ }
+ ```
+
+ Tämä määrittää takaisinsoittotoiminnon, joka kutsutaan, kun yhteyden tila IoT Hubiin muuttuu, kuten yhdistettäessä tai katkaistaessa yhteys. Tila lähetetään sarjaporttiin.
+
+1. Lisää tämän alapuolelle funktio IoT Hubiin yhdistämiseksi:
+
+ ```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);
+ }
+ ```
+
+ Tämä koodi alustaa IoT Hub -kirjastokoodin ja luo yhteyden käyttäen `config.h`-otsikkotiedostossa olevaa yhteysmerkkijonoa. Tämä yhteys perustuu MQTT:hen. Jos yhteys epäonnistuu, tämä lähetetään sarjaporttiin - jos näet tämän tulosteessa, tarkista yhteysmerkkijono. Lopuksi yhteyden tilan takaisinsoitto asetetaan.
+
+1. Kutsu tätä funktiota `setup`-funktiossa `initTime`-kutsun alapuolella:
+
+ ```cpp
+ connectIoTHub();
+ ```
+
+1. Kuten MQTT-asiakkaan kanssa, tämä koodi toimii yksittäisellä säikeellä, joten se tarvitsee aikaa käsitellä viestejä, joita hubi lähettää ja vastaanottaa. Lisää seuraava `loop`-funktion alkuun tämän tekemiseksi:
+
+ ```cpp
+ IoTHubDeviceClient_LL_DoWork(_device_ll_handle);
+ ```
+
+1. Käännä ja lataa tämä koodi. Näet yhteyden sarjavalvonnassa:
+
+ ```output
+ Connecting to WiFi..
+ Connected!
+ Fetched NTP epoch time is: 1619983687
+ Sending telemetry {"soil_moisture":391}
+ The device client is connected to iothub
+ ```
+
+ Tulosteessa näet NTP-ajan haun, jota seuraa laitteen asiakasohjelman yhdistäminen. Yhdistäminen voi kestää muutaman sekunnin, joten saatat nähdä maaperän kosteuden tulosteessa laitteen yhdistämisen aikana.
+
+ > 💁 Voit muuntaa NTP:n UNIX-ajan luettavampaan muotoon käyttämällä verkkosivustoa kuten [unixtimestamp.com](https://www.unixtimestamp.com)
+
+## Lähetä telemetriaa
+
+Nyt kun laitteesi on yhdistetty, voit lähettää telemetriatietoja IoT Hubiin MQTT-välittäjän sijaan.
+
+### Tehtävä - telemetrian lähettäminen
+
+1. Lisää seuraava funktio `setup`-funktion yläpuolelle:
+
+ ```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);
+ }
+ ```
+
+ Tämä koodi luo IoT Hub -viestin parametrina annetusta merkkijonosta, lähettää sen hubiin ja siivoaa viestiobjektin.
+
+1. Kutsu tätä koodia `loop`-funktiossa heti rivin jälkeen, jossa telemetria lähetetään sarjaporttiin:
+
+ ```cpp
+ sendTelemetry(telemetry.c_str());
+ ```
+
+## Käsittele komentoja
+
+Laitteesi täytyy käsitellä palvelinkoodista tuleva komento releen ohjaamiseksi. Tämä lähetetään suoran metodipyynnön muodossa.
+
+### Tehtävä - suoran metodipyynnön käsittely
+
+1. Lisää seuraava koodi ennen `connectIoTHub`-funktiota:
+
+ ```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);
+ }
+ }
+ ```
+
+ Tämä koodi määrittää takaisinsoittometodin, jonka IoT Hub -kirjasto voi kutsua vastaanottaessaan suoran metodipyynnön. Pyydetty metodi lähetetään `method_name`-parametrissa. Tämä funktio tulostaa kutsutun metodin sarjaporttiin ja kytkee releen päälle tai pois päältä metodin nimen mukaan.
+
+ > 💁 Tämä voitaisiin myös toteuttaa yhtenä suorana metodipyyntönä, jossa haluttu releen tila välitetään hyötykuormassa, joka voidaan välittää metodipyynnön mukana ja on saatavilla `payload`-parametrista.
+
+1. Lisää seuraava koodi `directMethodCallback`-funktion loppuun:
+
+ ```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;
+ ```
+
+ Suorille metodipyynnöille tarvitaan vastaus, ja vastaus koostuu kahdesta osasta - tekstivastauksesta ja palautuskoodista. Tämä koodi luo tuloksen seuraavana JSON-dokumenttina:
+
+ ```JSON
+ {
+ "Result": ""
+ }
+ ```
+
+ Tämä kopioidaan `response`-parametriin, ja tämän vastauksen koko asetetaan `response_size`-parametriin. Tämä koodi palauttaa `IOTHUB_CLIENT_OK` osoittamaan, että metodi käsiteltiin oikein.
+
+1. Kytke takaisinsoitto lisäämällä seuraava `connectIoTHub`-funktion loppuun:
+
+ ```cpp
+ IoTHubClient_LL_SetDeviceMethodCallback(_device_ll_handle, directMethodCallback, NULL);
+ ```
+
+1. `loop`-funktio kutsuu `IoTHubDeviceClient_LL_DoWork`-funktion IoT Hubin lähettämien tapahtumien käsittelemiseksi. Tämä kutsutaan vain 10 sekunnin välein `delay`-kutsun vuoksi, mikä tarkoittaa, että suoria metodeja käsitellään vain 10 sekunnin välein. Tämän tehokkuuden parantamiseksi 10 sekunnin viive voidaan toteuttaa useina lyhyempinä viiveinä, kutsuen `IoTHubDeviceClient_LL_DoWork` joka kerta. Lisää seuraava koodi `loop`-funktion yläpuolelle:
+
+ ```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);
+ }
+ ```
+
+ Tämä koodi toistaa kutsuen `IoTHubDeviceClient_LL_DoWork`-funktiota ja viivästyen 100 ms joka kerta. Se tekee tämän niin monta kertaa kuin tarvitaan viivästämään annetun `delay_time`-parametrin ajan. Tämä tarkoittaa, että laite odottaa enintään 100 ms suorien metodipyyntöjen käsittelemiseksi.
+
+1. Poista `loop`-funktiosta `IoTHubDeviceClient_LL_DoWork`-kutsu ja korvaa `delay(10000)`-kutsu seuraavalla kutsuaksesi tämän uuden funktion:
+
+ ```cpp
+ work_delay(10000);
+ ```
+
+> 💁 Löydät tämän koodin [code/wio-terminal](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/wio-terminal)-kansiosta.
+
+😀 Maaperän kosteusanturin ohjelmasi on yhdistetty IoT Hubiin!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/5-migrate-application-to-the-cloud/README.md b/translations/fi/2-farm/lessons/5-migrate-application-to-the-cloud/README.md
new file mode 100644
index 00000000..50f3da5e
--- /dev/null
+++ b/translations/fi/2-farm/lessons/5-migrate-application-to-the-cloud/README.md
@@ -0,0 +1,656 @@
+
+# Siirrä sovelluslogiikkasi pilveen
+
+
+
+> Luonnoskuva: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+Tämä oppitunti oli osa [IoT for Beginners Project 2 - Digital Agriculture -sarjaa](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx), joka on tuotettu [Microsoft Reactorin](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) toimesta.
+
+[](https://youtu.be/VVZDcs5u1_I)
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/17)
+
+## Johdanto
+
+Edellisessä oppitunnissa opit yhdistämään kasvien maaperän kosteuden seurannan ja releen ohjauksen pilvipohjaiseen IoT-palveluun. Seuraava askel on siirtää releen ajoitusta ohjaava palvelinkoodi pilveen. Tässä oppitunnissa opit tekemään tämän serverittömien funktioiden avulla.
+
+Tässä oppitunnissa käsitellään:
+
+* [Mitä serveritön tarkoittaa?](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud)
+* [Luo serveritön sovellus](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud)
+* [Luo IoT Hub -tapahtumakäynnistin](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud)
+* [Lähetä suoria metodipyyntöjä serverittömästä koodista](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud)
+* [Ota serveritön koodi käyttöön pilvessä](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud)
+
+## Mitä serveritön tarkoittaa?
+
+Serveritön, tai serveritön laskenta, tarkoittaa pienten koodilohkojen luomista, jotka suoritetaan pilvessä vastauksena erilaisiin tapahtumiin. Kun tapahtuma tapahtuu, koodisi suoritetaan ja sille välitetään tietoja tapahtumasta. Näitä tapahtumia voi tulla monista eri lähteistä, kuten verkkopyynnöistä, jonoon lisätyistä viesteistä, tietokannan muutoksista tai IoT-laitteiden lähettämistä viesteistä IoT-palveluun.
+
+
+
+> 💁 Jos olet käyttänyt tietokantatriggereitä aiemmin, voit ajatella tätä samalla tavalla: koodi käynnistyy tapahtumasta, kuten rivin lisäämisestä.
+
+
+
+Koodisi suoritetaan vain, kun tapahtuma tapahtuu, eikä sitä pidetä aktiivisena muina aikoina. Tapahtuma tapahtuu, koodisi ladataan ja suoritetaan. Tämä tekee serverittömästä mallista erittäin skaalautuvan – jos useita tapahtumia tapahtuu samanaikaisesti, pilvipalveluntarjoaja voi suorittaa funktiosi niin monta kertaa kuin tarvitaan samanaikaisesti käytettävissä olevilla palvelimilla. Haittapuolena on, että jos sinun täytyy jakaa tietoa tapahtumien välillä, sinun täytyy tallentaa se esimerkiksi tietokantaan sen sijaan, että säilyttäisit sen muistissa.
+
+Koodisi kirjoitetaan funktiona, joka ottaa tapahtuman tiedot parametrina. Näitä serverittömiä funktioita voi kirjoittaa monilla eri ohjelmointikielillä.
+
+> 🎓 Serveritöntä kutsutaan myös nimellä Functions as a Service (FaaS), koska jokainen tapahtumakäynnistin toteutetaan koodissa funktiona.
+
+Nimestään huolimatta serveritön käyttää palvelimia. Nimi viittaa siihen, että kehittäjänä sinun ei tarvitse huolehtia palvelimista, jotka suorittavat koodisi – sinun tarvitsee vain tietää, että koodisi suoritetaan tapahtuman tapahtuessa. Pilvipalveluntarjoajalla on serveritön *ajoympäristö*, joka hallitsee palvelimien, verkon, tallennustilan, suorittimen, muistin ja muiden resurssien allokointia koodisi suorittamiseksi. Tämän mallin vuoksi et maksa palvelimista, vaan koodisi suoritusajasta ja käytetystä muistista.
+
+> 💰 Serveritön on yksi edullisimmista tavoista suorittaa koodia pilvessä. Esimerkiksi tätä kirjoitettaessa eräs pilvipalveluntarjoaja sallii kaikkien serverittömien funktioidesi suorittaa yhteensä 1 000 000 kertaa kuukaudessa ennen kuin sinulta veloitetaan mitään, ja sen jälkeen veloitus on 0,20 USD per 1 000 000 suoritusta. Kun koodisi ei ole käynnissä, et maksa mitään.
+
+IoT-kehittäjänä serveritön malli on ihanteellinen. Voit kirjoittaa funktion, joka kutsutaan vastauksena viesteihin, jotka lähetetään mistä tahansa pilvipalveluun yhdistetystä IoT-laitteesta. Koodisi käsittelee kaikki lähetetyt viestit, mutta on käynnissä vain tarvittaessa.
+
+✅ Katso takaisin koodia, jonka kirjoitit palvelinkoodiksi kuuntelemaan viestejä MQTT:n kautta. Miten tämä voisi toimia pilvessä serverittömänä? Miten koodia pitäisi muuttaa tukemaan serveritöntä laskentaa?
+
+> 💁 Serveritön malli laajenee myös muihin pilvipalveluihin koodin suorittamisen lisäksi. Esimerkiksi serverittömiä tietokantoja on saatavilla pilvessä serverittömällä hinnoittelumallilla, jossa maksat per pyyntö, kuten kysely tai lisäys. Hinnoittelu perustuu yleensä siihen, kuinka paljon työtä pyynnön käsittely vaatii. Esimerkiksi yhden rivin valinta pääavaimen perusteella maksaa vähemmän kuin monimutkainen operaatio, joka yhdistää useita tauluja ja palauttaa tuhansia rivejä.
+
+## Luo serveritön sovellus
+
+Microsoftin serveritön laskentapalvelu tunnetaan nimellä Azure Functions.
+
+
+
+Alla oleva lyhyt video tarjoaa yleiskatsauksen Azure Functionsista.
+
+[](https://www.youtube.com/watch?v=8-jz5f_JyEQ)
+
+> 🎥 Klikkaa yllä olevaa kuvaa katsoaksesi videon.
+
+✅ Käytä hetki aikaa tutkiaksesi ja lue Azure Functionsin yleiskatsaus [Microsoft Azure Functions -dokumentaatiosta](https://docs.microsoft.com/azure/azure-functions/functions-overview?WT.mc_id=academic-17441-jabenn).
+
+Azure Functions -sovellusten kirjoittaminen alkaa valitsemallasi ohjelmointikielellä. Azure Functions tukee oletuksena Pythonia, JavaScriptiä, TypeScriptiä, C#:tä, F#:tä, Javaa ja Powershelliä. Tässä oppitunnissa opit kirjoittamaan Azure Functions -sovelluksen Pythonilla.
+
+> 💁 Azure Functions tukee myös mukautettuja käsittelijöitä, joten voit kirjoittaa funktioita millä tahansa kielellä, joka tukee HTTP-pyyntöjä, mukaan lukien vanhemmat kielet, kuten COBOL.
+
+Functions-sovellukset koostuvat yhdestä tai useammasta *käynnistimestä* – funktioista, jotka reagoivat tapahtumiin. Yhdessä Functions-sovelluksessa voi olla useita käynnistimiä, jotka jakavat yhteiset asetukset. Esimerkiksi Functions-sovelluksen asetustiedostossa voi olla IoT Hubin yhteystiedot, ja kaikki sovelluksen funktiot voivat käyttää näitä tietoja yhdistääkseen ja kuunnellakseen tapahtumia.
+
+### Tehtävä – asenna Azure Functions -työkalut
+
+> Tämän kirjoitushetkellä Azure Functions -koodityökalut eivät toimi täysin Apple Silicon -laitteilla Python-projekteissa. Tarvitset Intel-pohjaisen Macin, Windows-tietokoneen tai Linux-tietokoneen.
+
+Yksi Azure Functionsin hienoista ominaisuuksista on, että voit suorittaa niitä paikallisesti. Sama ajoympäristö, jota käytetään pilvessä, voidaan suorittaa tietokoneellasi, jolloin voit kirjoittaa koodia, joka reagoi IoT-viesteihin, ja suorittaa sen paikallisesti. Voit jopa debugata koodiasi tapahtumien käsittelyn aikana. Kun olet tyytyväinen koodiisi, voit ottaa sen käyttöön pilvessä.
+
+Azure Functions -työkalut ovat saatavilla CLI:nä, joka tunnetaan nimellä Azure Functions Core Tools.
+
+1. Asenna Azure Functions Core Tools noudattamalla ohjeita [Azure Functions Core Tools -dokumentaatiosta](https://docs.microsoft.com/azure/azure-functions/functions-run-local?WT.mc_id=academic-17441-jabenn).
+
+1. Asenna Azure Functions -laajennus VS Codeen. Tämä laajennus tarjoaa tuen Azure Functions -sovellusten luomiseen, debuggaamiseen ja käyttöönottoon. Katso ohjeet [Azure Functions -laajennuksen dokumentaatiosta](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-azuretools.vscode-azurefunctions).
+
+Kun otat Azure Functions -sovelluksen käyttöön pilvessä, se tarvitsee pienen määrän pilvitallennustilaa sovellustiedostojen ja lokitiedostojen tallentamiseen. Kun suoritat Functions-sovellusta paikallisesti, sinun täytyy silti yhdistää pilvitallennukseen, mutta sen sijaan, että käyttäisit oikeaa pilvitallennusta, voit käyttää tallennusemulaattoria nimeltä [Azurite](https://github.com/Azure/Azurite). Tämä toimii paikallisesti mutta käyttäytyy kuin pilvitallennus.
+
+> 🎓 Azuren tallennustila, jota Azure Functions käyttää, on Azure Storage Account. Näihin tileihin voi tallentaa tiedostoja, objekteja, tietoja tauluihin tai tietoja jonoihin. Yksi tallennustili voidaan jakaa useiden sovellusten, kuten Functions-sovelluksen ja verkkosovelluksen, kesken.
+
+1. Azurite on Node.js-sovellus, joten sinun täytyy asentaa Node.js. Löydät lataus- ja asennusohjeet [Node.js-verkkosivustolta](https://nodejs.org/). Jos käytät Macia, voit asentaa sen myös [Homebrew'n](https://formulae.brew.sh/formula/node) kautta.
+
+1. Asenna Azurite seuraavalla komennolla (`npm` on työkalu, joka asennetaan Node.js:n mukana):
+
+ ```sh
+ npm install -g azurite
+ ```
+
+1. Luo kansio nimeltä `azurite`, jota Azurite käyttää tietojen tallentamiseen:
+
+ ```sh
+ mkdir azurite
+ ```
+
+1. Suorita Azurite ja anna sille tämä uusi kansio:
+
+ ```sh
+ azurite --location azurite
+ ```
+
+ Azurite-tallennusemulaattori käynnistyy ja on valmis paikallisen Functions-ajoympäristön yhdistettäväksi.
+
+ ```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
+ ```
+
+### Tehtävä – luo Azure Functions -projekti
+
+Azure Functions CLI:llä voidaan luoda uusi Functions-sovellus.
+
+1. Luo kansio Functions-sovelluksellesi ja siirry siihen. Nimeä se `soil-moisture-trigger`.
+
+ ```sh
+ mkdir soil-moisture-trigger
+ cd soil-moisture-trigger
+ ```
+
+1. Luo Python-virtuaaliympäristö tämän kansion sisälle:
+
+ ```sh
+ python3 -m venv .venv
+ ```
+
+1. Aktivoi virtuaaliympäristö:
+
+ * Windowsissa:
+ * Jos käytät komentokehotetta tai Windows Terminalin komentokehotetta, suorita:
+
+ ```cmd
+ .venv\Scripts\activate.bat
+ ```
+
+ * Jos käytät PowerShelliä, suorita:
+
+ ```powershell
+ .\.venv\Scripts\Activate.ps1
+ ```
+
+ * macOS:ssä tai Linuxissa suorita:
+
+ ```cmd
+ source ./.venv/bin/activate
+ ```
+
+ > 💁 Nämä komennot tulisi suorittaa samasta sijainnista, jossa loit virtuaaliympäristön. Sinun ei koskaan tarvitse siirtyä `.venv`-kansioon, vaan sinun tulisi aina suorittaa aktivointikomento ja kaikki paketinasennus- tai koodinajokomennot kansiosta, jossa olit virtuaaliympäristöä luodessasi.
+
+1. Suorita seuraava komento luodaksesi Functions-sovellus tähän kansioon:
+
+ ```sh
+ func init --worker-runtime python soil-moisture-trigger
+ ```
+
+ Tämä luo kolme tiedostoa nykyisen kansion sisälle:
+
+ * `host.json` – tämä JSON-dokumentti sisältää asetukset Functions-sovelluksellesi. Näitä asetuksia ei tarvitse muokata.
+ * `local.settings.json` – tämä JSON-dokumentti sisältää asetukset, joita sovelluksesi käyttää paikallisesti suoritettaessa, kuten IoT Hubin yhteysmerkkijonot. Nämä asetukset ovat vain paikallisia, eikä niitä tulisi lisätä versionhallintaan. Kun otat sovelluksen käyttöön pilvessä, näitä asetuksia ei oteta käyttöön, vaan asetukset ladataan sovellusasetuksista. Tämä käsitellään myöhemmin tässä oppitunnissa.
+ * `requirements.txt` – tämä on [Pip-vaatimustiedosto](https://pip.pypa.io/en/stable/user_guide/#requirements-files), joka sisältää Functions-sovelluksen suorittamiseen tarvittavat Pip-paketit.
+
+1. `local.settings.json` -tiedostossa on asetus tallennustilille, jota Functions-sovellus käyttää. Tämä on oletuksena tyhjä, joten se täytyy asettaa. Yhdistääksesi Azurite-paikalliseen tallennusemulaattoriin, aseta tämä arvo seuraavasti:
+
+ ```json
+ "AzureWebJobsStorage": "UseDevelopmentStorage=true",
+ ```
+
+1. Asenna tarvittavat Pip-paketit käyttämällä vaatimustiedostoa:
+
+ ```sh
+ pip install -r requirements.txt
+ ```
+
+ > 💁 Tarvittavat Pip-paketit täytyy olla tässä tiedostossa, jotta kun Functions-sovellus otetaan käyttöön pilvessä, ajoympäristö voi varmistaa oikeiden pakettien asennuksen.
+
+1. Testataksesi, että kaikki toimii oikein, voit käynnistää Functions-ajoympäristön. Suorita seuraava komento tehdäksesi tämän:
+
+ ```sh
+ func start
+ ```
+
+ Näet, että ajoympäristö käynnistyy ja raportoi, ettei se löytänyt mitään tehtäväfunktioita (käynnistimiä).
+
+ ```output
+ (.venv) ➜ soil-moisture-trigger func start
+ Found Python version 3.9.1 (python3).
+
+ Azure Functions Core Tools
+ Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit)
+ Function Runtime Version: 3.0.15417.0
+
+ [2021-05-05T01:24:46.795Z] No job functions found.
+ ```
+> ⚠️ Jos saat palomuurin ilmoituksen, anna lupa, sillä `func`-sovelluksen täytyy pystyä lukemaan ja kirjoittamaan verkkoosi.
+> ⚠️ Jos käytät macOS:ia, tulosteessa saattaa näkyä varoituksia:
+>
+> ```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.
+ > ```
+>
+> Voit ohittaa nämä, kunhan Functions-sovellus käynnistyy oikein ja listaa käynnissä olevat funktiot. Kuten [tässä Microsoft Docs Q&A -kysymyksessä](https://docs.microsoft.com/answers/questions/396617/azure-functions-core-tools-error-osx-devshmazurefu.html?WT.mc_id=academic-17441-jabenn) mainitaan, nämä varoitukset voi jättää huomiotta.
+
+1. Lopeta Functions-sovellus painamalla `ctrl+c`.
+
+1. Avaa nykyinen kansio VS Code:ssa joko avaamalla VS Code ja sitten tämä kansio, tai suorittamalla seuraava komento:
+
+ ```sh
+ code .
+ ```
+
+ VS Code tunnistaa Functions-projektisi ja näyttää ilmoituksen:
+
+ ```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?
+ ```
+
+ 
+
+ Valitse **Yes** tästä ilmoituksesta.
+
+1. Varmista, että Python-virtuaaliympäristö on käynnissä VS Code -terminaalissa. Lopeta ja käynnistä se uudelleen tarvittaessa.
+
+## Luo IoT Hub -tapahtumatriggeri
+
+Functions-sovellus toimii palvelimettoman koodisi alustana. Vastataksesi IoT Hub -tapahtumiin voit lisätä IoT Hub -triggerin tähän sovellukseen. Tämä triggeri tarvitsee yhteyden viestivirtaan, joka lähetetään IoT Hubiin, ja sen tulee reagoida näihin viesteihin. Viestivirran saamiseksi triggerin täytyy yhdistää IoT Hubin *Event Hub -yhteensopivaan päätepisteeseen*.
+
+IoT Hub perustuu toiseen Azure-palveluun nimeltä Azure Event Hubs. Event Hubs on palvelu, joka mahdollistaa viestien lähettämisen ja vastaanottamisen, ja IoT Hub laajentaa tätä lisäämällä ominaisuuksia IoT-laitteille. Viestien lukeminen IoT Hubista tapahtuu samalla tavalla kuin Event Hubsia käytettäessä.
+
+✅ Tee tutkimusta: Lue Event Hubsin yleiskatsaus [Azure Event Hubs -dokumentaatiosta](https://docs.microsoft.com/azure/event-hubs/event-hubs-about?WT.mc_id=academic-17441-jabenn). Miten perusominaisuudet vertautuvat IoT Hubiin?
+
+IoT-laitteen täytyy käyttää salaisuutta sisältävää avainta yhdistääkseen IoT Hubiin, mikä varmistaa, että vain sallitut laitteet voivat yhdistää. Sama pätee viestien lukemiseen: koodisi tarvitsee yhteysmerkkijonon, joka sisältää salaisen avaimen sekä IoT Hubin tiedot.
+
+> 💁 Oletusyhteysmerkkijonolla on **iothubowner**-oikeudet, mikä antaa täydet oikeudet IoT Hubiin kaikelle koodille, joka käyttää sitä. Ihanteellisesti sinun tulisi yhdistää vain tarvittavilla vähimmäisoikeuksilla. Tämä käsitellään seuraavassa oppitunnissa.
+
+Kun triggeri on yhdistetty, funktion sisällä oleva koodi kutsutaan jokaiselle IoT Hubiin lähetetylle viestille riippumatta siitä, mikä laite sen lähetti. Triggeri välittää viestin parametrina.
+
+### Tehtävä - hanki Event Hub -yhteensopivan päätepisteen yhteysmerkkijono
+
+1. Suorita VS Code -terminaalissa seuraava komento saadaksesi IoT Hubin Event Hub -yhteensopivan päätepisteen yhteysmerkkijonon:
+
+ ```sh
+ az iot hub connection-string show --default-eventhub \
+ --output table \
+ --hub-name
+ ```
+
+ Korvaa `` IoT Hubille antamallasi nimellä.
+
+1. Avaa VS Code:ssa `local.settings.json` -tiedosto. Lisää seuraava arvo `Values`-osioon:
+
+ ```json
+ "IOT_HUB_CONNECTION_STRING": ""
+ ```
+
+ Korvaa `` edellisen vaiheen arvolla. Lisää pilkku edellisen rivin jälkeen, jotta JSON on kelvollinen.
+
+### Tehtävä - luo tapahtumatriggeri
+
+Nyt voit luoda tapahtumatriggerin.
+
+1. Suorita VS Code -terminaalissa seuraava komento `soil-moisture-trigger`-kansion sisällä:
+
+ ```sh
+ func new --name iot-hub-trigger --template "Azure Event Hub trigger"
+ ```
+
+ Tämä luo uuden funktion nimeltä `iot-hub-trigger`. Triggeri yhdistää IoT Hubin Event Hub -yhteensopivaan päätepisteeseen, joten voit käyttää Event Hub -triggeriä. Erillistä IoT Hub -triggeriä ei ole.
+
+Tämä luo kansion `soil-moisture-trigger`-kansion sisälle nimeltä `iot-hub-trigger`, joka sisältää tämän funktion. Tämä kansio sisältää seuraavat tiedostot:
+
+* `__init__.py` - Python-kooditiedosto, joka sisältää triggerin. Tiedoston nimi noudattaa Python-moduulin nimeämiskäytäntöä.
+
+ Tämä tiedosto sisältää seuraavan koodin:
+
+ ```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'))
+ ```
+
+ Triggerin ydin on `main`-funktio. Tämä funktio kutsutaan IoT Hubin tapahtumien kanssa. Funktiolla on parametri nimeltä `event`, joka sisältää `EventHubEvent`-objektin. Joka kerta kun viesti lähetetään IoT Hubiin, tämä funktio kutsutaan ja viesti välitetään `event`-parametrina, yhdessä ominaisuuksien kanssa, jotka ovat samoja kuin edellisessä oppitunnissa nähtyjen annotaatioiden kanssa.
+
+ Funktion ydin kirjaa tapahtuman.
+
+* `function.json` - sisältää triggerin konfiguraation. Pääkonfiguraatio on osiossa nimeltä `bindings`. Binding tarkoittaa yhteyttä Azure Functionsin ja muiden Azure-palveluiden välillä. Tämä funktio sisältää syöttöbindingin Event Hubiin - se yhdistää Event Hubiin ja vastaanottaa dataa.
+
+ > 💁 Voit myös lisätä ulostulobindingeja, jolloin funktion ulostulo lähetetään toiseen palveluun. Esimerkiksi voit lisätä ulostulobindingin tietokantaan ja palauttaa IoT Hubin tapahtuman funktiosta, jolloin se lisätään automaattisesti tietokantaan.
+
+ ✅ Tee tutkimusta: Lue bindingeista [Azure Functions triggers and bindings concepts -dokumentaatiosta](https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings?WT.mc_id=academic-17441-jabenn&tabs=python).
+
+ `bindings`-osio sisältää bindingin konfiguraation. Kiinnostavat arvot ovat:
+
+ * `"type": "eventHubTrigger"` - kertoo funktiolle, että sen tulee kuunnella tapahtumia Event Hubista
+ * `"name": "events"` - Event Hub -tapahtumien parametrin nimi. Tämä vastaa Python-koodin `main`-funktion parametrin nimeä.
+ * `"direction": "in"` - syöttöbinding, data Event Hubista tulee funktioon
+ * `"connection": ""` - määrittää asetuksen nimen, josta yhteysmerkkijono luetaan. Paikallisesti ajettaessa tämä lukee asetuksen `local.settings.json`-tiedostosta.
+
+ > 💁 Yhteysmerkkijonoa ei voi tallentaa `function.json`-tiedostoon, vaan se täytyy lukea asetuksista. Tämä estää yhteysmerkkijonon paljastamisen vahingossa.
+
+1. Päivitä `function.json`-tiedoston `cardinality`-kentän arvo `many` -> `one` [Azure Functions -mallin bugin](https://github.com/Azure/azure-functions-templates/issues/1250) vuoksi:
+
+ ```json
+ "cardinality": "one",
+ ```
+
+1. Päivitä `"connection"`-arvo `function.json`-tiedostossa osoittamaan uuteen arvoon, jonka lisäsit `local.settings.json`-tiedostoon:
+
+ ```json
+ "connection": "IOT_HUB_CONNECTION_STRING",
+ ```
+
+ > 💁 Muista - tämän täytyy osoittaa asetukseen, ei sisältää varsinaista yhteysmerkkijonoa.
+
+1. Yhteysmerkkijono sisältää `eventHubName`-arvon, joten tämän arvon `function.json`-tiedostossa täytyy olla tyhjä. Päivitä tämä arvo tyhjäksi:
+
+ ```json
+ "eventHubName": "",
+ ```
+
+### Tehtävä - aja tapahtumatriggeri
+
+1. Varmista, että IoT Hub -tapahtumamonitori ei ole käynnissä. Jos tämä on käynnissä samaan aikaan kuin Functions-sovellus, Functions-sovellus ei voi yhdistää ja kuluttaa tapahtumia.
+
+ > 💁 Useat sovellukset voivat yhdistää IoT Hubin päätepisteisiin eri *kuluttajaryhmien* avulla. Nämä käsitellään myöhemmässä oppitunnissa.
+
+1. Aja Functions-sovellus suorittamalla seuraava komento VS Code -terminaalissa:
+
+ ```sh
+ func start
+ ```
+
+ Functions-sovellus käynnistyy ja löytää `iot-hub-trigger`-funktion. Se käsittelee kaikki tapahtumat, jotka on jo lähetetty IoT Hubiin viimeisen päivän aikana.
+
+ ```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)
+ ```
+
+ Jokainen funktion kutsu ympäröidään `Executing 'Functions.iot-hub-trigger'`/`Executed 'Functions.iot-hub-trigger'`-lohkoilla tulosteessa, joten näet kuinka monta viestiä käsiteltiin kussakin funktion kutsussa.
+
+1. Varmista, että IoT-laitteesi on käynnissä. Näet uusia maaperän kosteutta koskevia viestejä ilmestyvän Functions-sovellukseen.
+
+1. Lopeta ja käynnistä Functions-sovellus uudelleen. Näet, että se ei käsittele aiempia viestejä uudelleen, vaan käsittelee vain uusia viestejä.
+
+> 💁 VS Code tukee myös Functions-sovellusten debuggausta. Voit asettaa breakpointin klikkaamalla koodirivin alussa olevaa reunaa, siirtämällä kursorin riville ja valitsemalla *Run -> Toggle breakpoint*, tai painamalla `F9`. Voit käynnistää debuggerin valitsemalla *Run -> Start debugging*, painamalla `F5`, tai valitsemalla *Run and debug* -paneelin ja klikkaamalla **Start debugging**-painiketta. Näin voit tarkastella käsiteltävien tapahtumien yksityiskohtia.
+
+#### Vianetsintä
+
+* Jos saat seuraavan virheen:
+
+ ```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.
+ ```
+
+ Tarkista, että Azurite on käynnissä ja että olet asettanut `AzureWebJobsStorage`-arvon `local.settings.json`-tiedostossa `UseDevelopmentStorage=true`.
+
+* Jos saat seuraavan virheen:
+
+ ```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'
+ ```
+
+ Tarkista, että olet asettanut `cardinality`-arvon `function.json`-tiedostossa `one`.
+
+* Jos saat seuraavan virheen:
+
+ ```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').
+ ```
+
+ Tarkista, että olet asettanut `eventHubName`-arvon `function.json`-tiedostossa tyhjäksi.
+
+## Lähetä suoria metodipyyntöjä palvelimettomasta koodista
+
+Tähän mennessä Functions-sovelluksesi on kuunnellut viestejä IoT Hubista Event Hub -yhteensopivan päätepisteen kautta. Nyt sinun täytyy lähettää komentoja IoT-laitteelle. Tämä tehdään käyttämällä eri yhteyttä IoT Hubiin *Registry Managerin* kautta. Registry Manager on työkalu, joka mahdollistaa IoT Hubiin rekisteröityjen laitteiden tarkastelun ja niiden kanssa kommunikoinnin lähettämällä pilvestä laitteelle viestejä, suoria metodipyyntöjä tai päivittämällä laitteen twinin. Voit myös käyttää sitä IoT-laitteiden rekisteröintiin, päivittämiseen tai poistamiseen IoT Hubista.
+
+Yhdistääksesi Registry Manageriin tarvitset yhteysmerkkijonon.
+
+### Tehtävä - hanki Registry Manager -yhteysmerkkijono
+
+1. Hankkiaksesi yhteysmerkkijonon, suorita seuraava komento:
+
+ ```sh
+ az iot hub connection-string show --policy-name service \
+ --output table \
+ --hub-name
+ ```
+
+ Korvaa `` IoT Hubille antamallasi nimellä.
+
+ Yhteysmerkkijono pyydetään *ServiceConnect*-käytännölle käyttämällä `--policy-name service`-parametria. Kun pyydät yhteysmerkkijonoa, voit määrittää, mitä oikeuksia yhteysmerkkijono sallii. ServiceConnect-käytäntö sallii koodisi yhdistää ja lähettää viestejä IoT-laitteille.
+
+ ✅ Tee tutkimusta: Lue eri käytännöistä [IoT Hub -oikeuksien dokumentaatiosta](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security#iot-hub-permissions?WT.mc_id=academic-17441-jabenn)
+
+1. Avaa VS Code:ssa `local.settings.json` -tiedosto. Lisää seuraava arvo `Values`-osioon:
+
+ ```json
+ "REGISTRY_MANAGER_CONNECTION_STRING": ""
+ ```
+
+ Korvaa `` edellisen vaiheen arvolla. Lisää pilkku edellisen rivin jälkeen, jotta JSON on kelvollinen.
+
+### Tehtävä - lähetä suora metodipyyntö laitteelle
+
+1. Registry Managerin SDK on saatavilla Pip-paketin kautta. Lisää seuraava rivi `requirements.txt`-tiedostoon lisätäksesi riippuvuuden tähän pakettiin:
+
+ ```sh
+ azure-iot-hub
+ ```
+
+1. Varmista, että VS Code -terminaaliin on aktivoitu virtuaaliympäristö, ja suorita seuraava komento asentaaksesi Pip-paketit:
+
+ ```sh
+ pip install -r requirements.txt
+ ```
+
+1. Lisää seuraavat tuonnit `__init__.py`-tiedostoon:
+
+ ```python
+ import json
+ import os
+ from azure.iot.hub import IoTHubRegistryManager
+ from azure.iot.hub.models import CloudToDeviceMethod
+ ```
+
+ Tämä tuo joitakin järjestelmäkirjastoja sekä kirjastot Registry Managerin kanssa kommunikointiin ja suorien metodipyyntöjen lähettämiseen.
+
+1. Poista koodi `main`-metodin sisältä, mutta säilytä itse metodi.
+
+1. Lisää `main`-metodiin seuraava koodi:
+
+ ```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}')
+ ```
+
+ Tämä koodi poimii tapahtuman rungon, joka sisältää IoT-laitteen lähettämän JSON-viestin.
+
+ Se hakee laitteen tunnuksen viestin mukana lähetetyistä annotaatioista. Tapahtuman runko sisältää telemetriana lähetetyn viestin, ja `iothub_metadata`-sanakirja sisältää IoT Hubin asettamat ominaisuudet, kuten lähettäjän laitteen tunnuksen ja ajan, jolloin viesti lähetettiin.
+
+ Tämä tieto kirjataan. Näet tämän kirjauksen terminaalissa, kun ajat Functions-sovelluksen paikallisesti.
+
+1. Lisää tämän alle seuraava koodi:
+
+ ```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='{}')
+ ```
+
+ Tämä koodi hakee maaperän kosteuden viestistä. Se tarkistaa kosteuden ja luo sen perusteella apuluokan suoralle metodipyynnölle joko `relay_on`- tai `relay_off`-metodille. Metodipyyntö ei tarvitse sisältöä, joten tyhjä JSON-dokumentti lähetetään.
+
+1. Lisää tämän alle seuraava koodi:
+
+ ```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)
+ ```
+Tämä koodi lataa `REGISTRY_MANAGER_CONNECTION_STRING`-arvon tiedostosta `local.settings.json`. Tämän tiedoston arvot ovat käytettävissä ympäristömuuttujina, ja niitä voidaan lukea `os.environ`-funktiolla, joka palauttaa sanakirjan kaikista ympäristömuuttujista.
+
+> 💁 Kun tämä koodi otetaan käyttöön pilvessä, `local.settings.json`-tiedoston arvot asetetaan *Sovellusasetuksiksi* (Application Settings), ja niitä voidaan lukea ympäristömuuttujista.
+
+Koodi luo sitten instanssin Registry Manager -apuohjelmaluokasta käyttäen yhteysmerkkijonoa.
+
+1. Lisää tämän alle seuraava koodi:
+
+ ```python
+ registry_manager.invoke_device_method(device_id, direct_method)
+
+ logging.info('Direct method request sent!')
+ ```
+
+ Tämä koodi käskee rekisterinhallintaa lähettämään suoran metodipyynnön laitteelle, joka lähetti telemetriatiedot.
+
+ > 💁 Aiemmissa oppitunneissa luomissasi sovellusversioissa, jotka käyttivät MQTT:tä, releen ohjauskomennot lähetettiin kaikille laitteille. Koodi oletti, että käytössä olisi vain yksi laite. Tämä koodiversio lähettää metodipyynnön yhdelle laitteelle, joten se toimii, vaikka sinulla olisi useita kosteusantureiden ja releiden kokoonpanoja, lähettäen oikean metodipyynnön oikealle laitteelle.
+
+1. Käynnistä Functions-sovellus ja varmista, että IoT-laitteesi lähettää dataa. Näet viestien käsittelyn ja suorien metodipyyntöjen lähettämisen. Siirrä maaperän kosteusanturia maahan ja pois maasta nähdäksesi arvojen muuttuvan ja releen kytkeytyvän päälle ja pois.
+
+> 💁 Löydät tämän koodin [code/functions](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud/code/functions) -kansiosta.
+
+## Ota palvelimeton koodi käyttöön pilvessä
+
+Koodisi toimii nyt paikallisesti, joten seuraava askel on ottaa Functions-sovellus käyttöön pilvessä.
+
+### Tehtävä - luo pilviresurssit
+
+Functions-sovelluksesi täytyy ottaa käyttöön Azureen Functions App -resurssina, joka sijaitsee IoT Hubille luomassasi resurssiryhmässä. Tarvitset myös Azureen luodun tallennustilin korvaamaan paikallisesti käytössä olevan emulaattorin.
+
+1. Suorita seuraava komento luodaksesi tallennustili:
+
+ ```sh
+ az storage account create --resource-group soil-moisture-sensor \
+ --sku Standard_LRS \
+ --name
+ ```
+
+ Korvaa `` tallennustilisi nimellä. Nimen täytyy olla globaalisti uniikki, koska se muodostaa osan URL-osoitteesta, jota käytetään tallennustilin käyttämiseen. Voit käyttää vain pieniä kirjaimia ja numeroita, ei muita merkkejä, ja nimi on rajoitettu 24 merkkiin. Käytä esimerkiksi `sms` ja lisää loppuun uniikki tunniste, kuten satunnaisia sanoja tai nimesi.
+
+ `--sku Standard_LRS` valitsee hinnoittelutason, valiten edullisimman yleiskäyttöisen tilin. Tallennustilille ei ole ilmaista tasoa, ja maksat käytön mukaan. Kustannukset ovat suhteellisen alhaiset, kalleimman tallennustilan ollessa alle 0,05 USD kuukaudessa per gigatavu.
+
+ ✅ Lue lisää hinnoittelusta [Azure Storage Account pricing page](https://azure.microsoft.com/pricing/details/storage/?WT.mc_id=academic-17441-jabenn) -sivulta.
+
+1. Suorita seuraava komento luodaksesi Functions App:
+
+ ```sh
+ az functionapp create --resource-group soil-moisture-sensor \
+ --runtime python \
+ --functions-version 3 \
+ --os-type Linux \
+ --consumption-plan-location \
+ --storage-account \
+ --name
+ ```
+
+ Korvaa `` sijainnilla, jota käytit luodessasi resurssiryhmän edellisessä oppitunnissa.
+
+ Korvaa `` tallennustilisi nimellä, jonka loit edellisessä vaiheessa.
+
+ Korvaa `` uniikilla nimellä Functions-sovelluksellesi. Nimen täytyy olla globaalisti uniikki, koska se muodostaa osan URL-osoitteesta, jota voidaan käyttää Functions-sovelluksen käyttämiseen. Käytä esimerkiksi `soil-moisture-sensor-` ja lisää loppuun uniikki tunniste, kuten satunnaisia sanoja tai nimesi.
+
+ `--functions-version 3` -vaihtoehto asettaa käytettävän Azure Functions -version. Versio 3 on uusin versio.
+
+ `--os-type Linux` kertoo Functions-ajoympäristölle, että näitä funktioita isännöidään Linuxissa. Funktioita voidaan isännöidä Linuxissa tai Windowsissa käytetystä ohjelmointikielestä riippuen. Python-sovellukset tukevat vain Linuxia.
+
+### Tehtävä - lataa sovellusasetuksesi
+
+Kun kehitit Functions-sovellustasi, tallensit joitakin asetuksia `local.settings.json`-tiedostoon IoT Hubin yhteysmerkkijonoja varten. Nämä täytyy kirjoittaa Azure Functions Appin sovellusasetuksiin, jotta koodisi voi käyttää niitä.
+
+> 🎓 `local.settings.json`-tiedosto on tarkoitettu vain paikalliseen kehitykseen, eikä sitä pitäisi tallentaa versionhallintaan, kuten GitHubiin. Pilveen otettaessa käyttöön käytetään sovellusasetuksia. Sovellusasetukset ovat pilvessä isännöityjä avain/arvo-pareja, joita luetaan ympäristömuuttujista joko koodissasi tai ajonaikaisesti, kun koodisi yhdistetään IoT Hubiin.
+
+1. Suorita seuraava komento asettaaksesi `IOT_HUB_CONNECTION_STRING`-asetuksen Functions-sovelluksen sovellusasetuksiin:
+
+ ```sh
+ az functionapp config appsettings set --resource-group soil-moisture-sensor \
+ --name \
+ --settings "IOT_HUB_CONNECTION_STRING="
+ ```
+
+ Korvaa `` Functions-sovelluksesi nimellä.
+
+ Korvaa `` `local.settings.json`-tiedostosi `IOT_HUB_CONNECTION_STRING`-arvolla.
+
+1. Toista edellinen vaihe, mutta aseta `REGISTRY_MANAGER_CONNECTION_STRING` vastaavalla arvolla `local.settings.json`-tiedostostasi.
+
+Kun suoritat nämä komennot, ne tulostavat myös listan kaikista sovellusasetuksista Functions-sovellukselle. Voit käyttää tätä tarkistaaksesi, että arvosi on asetettu oikein.
+
+> 💁 Näet arvon, joka on jo asetettu `AzureWebJobsStorage`-asetukselle. `local.settings.json`-tiedostossasi tämä oli asetettu käyttämään paikallista tallennusemulaattoria. Kun loit Functions-sovelluksen, annoit tallennustilin parametrina, ja tämä asetus määritettiin automaattisesti.
+
+### Tehtävä - ota Functions-sovellus käyttöön pilvessä
+
+Nyt kun Functions-sovellus on valmis, koodisi voidaan ottaa käyttöön.
+
+1. Suorita seuraava komento VS Code -terminaalista julkaistaksesi Functions-sovelluksesi:
+
+ ```sh
+ func azure functionapp publish
+ ```
+
+ Korvaa `` Functions-sovelluksesi nimellä.
+
+Koodi pakataan ja lähetetään Functions-sovellukseen, jossa se otetaan käyttöön ja käynnistetään. Konsoliin tulostuu paljon tietoa, ja lopuksi saat vahvistuksen käyttöönotosta sekä listan käyttöön otetuista funktioista. Tässä tapauksessa lista sisältää vain liipaisimen.
+
+```output
+Deployment successful.
+Remote build succeeded!
+Syncing triggers...
+Functions in soil-moisture-sensor:
+ iot-hub-trigger - [eventHubTrigger]
+```
+
+Varmista, että IoT-laitteesi on käynnissä. Muuta kosteustasoja säätämällä maaperän kosteutta tai siirtämällä anturia maahan ja pois maasta. Näet releen kytkeytyvän päälle ja pois maaperän kosteuden muuttuessa.
+
+---
+
+## 🚀 Haaste
+
+Edellisessä oppitunnissa hallitsit releen ajoitusta peruuttamalla MQTT-viestien tilauksen, kun rele oli päällä, ja hetken sen sammuttamisen jälkeen. Tätä menetelmää ei voi käyttää tässä - et voi peruuttaa IoT Hub -liipaisintasi.
+
+Mieti erilaisia tapoja, joilla voisit käsitellä tätä Functions-sovelluksessasi.
+
+## Oppitunnin jälkeinen kysely
+
+[Oppitunnin jälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/18)
+
+## Kertaus ja itseopiskelu
+
+* Lue lisää palvelimettomasta laskennasta [Serverless Computing -sivulta Wikipediassa](https://wikipedia.org/wiki/Serverless_computing)
+* Lue palvelimettoman käytöstä Azuren kanssa, mukaan lukien lisää esimerkkejä, [Go serverless for your IoT needs Azure -blogikirjoituksesta](https://azure.microsoft.com/blog/go-serverless-for-your-iot-needs/?WT.mc_id=academic-17441-jabenn)
+* Opi lisää Azure Functionsista [Azure Functions YouTube -kanavalla](https://www.youtube.com/c/AzureFunctions)
+
+## Tehtävä
+
+[Lisää manuaalinen releen ohjaus](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md b/translations/fi/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md
new file mode 100644
index 00000000..949b0dd0
--- /dev/null
+++ b/translations/fi/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md
@@ -0,0 +1,70 @@
+
+# Lisää manuaalinen releen ohjaus
+
+## Ohjeet
+
+Palvelimettoman koodin suoritus voi käynnistyä monin eri tavoin, kuten HTTP-pyynnöillä. Voit käyttää HTTP-käynnistimiä lisätäksesi manuaalisen ohituksen releen ohjaukseen, jolloin joku voi kytkeä releen päälle tai pois päältä verkkopyynnön avulla.
+
+Tässä tehtävässä sinun tulee lisätä kaksi HTTP-käynnistintä Functions App -sovellukseesi releen päälle ja pois päältä kytkemiseksi, hyödyntäen oppitunnilla opittuja asioita laitteelle komentoja lähettämiseen.
+
+Muutamia vinkkejä:
+
+* Voit lisätä HTTP-käynnistimen olemassa olevaan Functions App -sovellukseesi seuraavalla komennolla:
+
+ ```sh
+ func new --name --template "HTTP trigger"
+ ```
+
+ Korvaa `` HTTP-käynnistimen nimellä. Käytä esimerkiksi `relay_on` ja `relay_off`.
+
+* HTTP-käynnistimillä voi olla käyttöoikeuksien hallinta. Oletuksena ne vaativat toiminnolle spesifisen API-avaimen, joka välitetään URL-osoitteen mukana. Tässä tehtävässä voit poistaa tämän rajoituksen, jotta kuka tahansa voi suorittaa toiminnon. Tee tämä päivittämällä `authLevel`-asetus HTTP-käynnistimien `function.json`-tiedostossa seuraavasti:
+
+ ```json
+ "authLevel": "anonymous"
+ ```
+
+ > 💁 Voit lukea lisää käyttöoikeuksien hallinnasta [Function access keys -dokumentaatiosta](https://docs.microsoft.com/azure/azure-functions/functions-bindings-http-webhook-trigger?WT.mc_id=academic-17441-jabenn#authorization-keys).
+
+* HTTP-käynnistimet tukevat oletuksena GET- ja POST-pyyntöjä. Tämä tarkoittaa, että voit kutsua niitä verkkoselaimella - verkkoselaimet tekevät GET-pyyntöjä.
+
+ Kun suoritat Functions App -sovellusta paikallisesti, näet käynnistimen URL-osoitteen:
+
+ ```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
+ ```
+
+ Liitä URL-osoite selaimeesi ja paina `return`, tai `Ctrl+klikkaa` (`Cmd+klikkaa` macOS:ssä) linkkiä VS Code -terminaali-ikkunassa avataksesi sen oletusselaimessasi. Tämä suorittaa käynnistimen.
+
+ > 💁 Huomaa, että URL-osoitteessa on `/api` - HTTP-käynnistimet ovat oletuksena `api`-aliverkkotunnuksessa.
+
+* Kun julkaiset Functions App -sovelluksen, HTTP-käynnistimen URL-osoite on:
+
+ `https://.azurewebsites.net/api/`
+
+ Missä `` on Functions App -sovelluksesi nimi ja `` on käynnistimesi nimi.
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannettavaa |
+| -------- | ----------- | -------- | ------------- |
+| Luo HTTP-käynnistimet | Luotu 2 käynnistintä releen päälle ja pois päältä kytkemiseksi, sopivilla nimillä | Luotu yksi käynnistin sopivalla nimellä | Ei onnistuttu luomaan käynnistimiä |
+| Ohjaa relettä HTTP-käynnistimistä | Molemmat käynnistimet yhdistetty IoT Hubiin ja relettä ohjattu oikein | Yksi käynnistin yhdistetty IoT Hubiin ja relettä ohjattu oikein | Käynnistimiä ei onnistuttu yhdistämään IoT Hubiin |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/6-keep-your-plant-secure/README.md b/translations/fi/2-farm/lessons/6-keep-your-plant-secure/README.md
new file mode 100644
index 00000000..4e28a9ec
--- /dev/null
+++ b/translations/fi/2-farm/lessons/6-keep-your-plant-secure/README.md
@@ -0,0 +1,245 @@
+
+# Pidä kasvisi turvassa
+
+
+
+> Luonnoskuva: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/19)
+
+## Johdanto
+
+Viimeisissä oppitunneissa olet luonut IoT-laitteen maaperän kosteuden seurantaan ja yhdistänyt sen pilveen. Mutta mitä jos kilpailevan viljelijän palkkaamat hakkerit saisivat hallintaansa IoT-laitteesi? Entä jos he lähettäisivät jatkuvasti korkeita maaperän kosteusarvoja, jolloin kasvejasi ei koskaan kasteltaisi, tai kytkisivät kastelujärjestelmäsi päälle jatkuvasti, jolloin kasvit kuolisivat liikakasteluun ja vesilaskusi nousisi pilviin?
+
+Tässä oppitunnissa opit IoT-laitteiden suojaamisesta. Koska tämä on projektin viimeinen oppitunti, opit myös, kuinka pilvipalveluresurssit siivotaan, jotta vältetään mahdolliset lisäkustannukset.
+
+Tässä oppitunnissa käsitellään:
+
+* [Miksi IoT-laitteet pitää suojata?](../../../../../2-farm/lessons/6-keep-your-plant-secure)
+* [Salaustekniikka](../../../../../2-farm/lessons/6-keep-your-plant-secure)
+* [IoT-laitteiden suojaaminen](../../../../../2-farm/lessons/6-keep-your-plant-secure)
+* [X.509-sertifikaatin luominen ja käyttö](../../../../../2-farm/lessons/6-keep-your-plant-secure)
+
+> 🗑 Tämä on projektin viimeinen oppitunti, joten tämän oppitunnin ja tehtävän suorittamisen jälkeen muista siivota pilvipalvelusi. Tarvitset palveluita tehtävän suorittamiseen, joten varmista, että teet sen ensin.
+>
+> Katso tarvittaessa [ohjeet projektin siivoamiseen](../../../clean-up.md).
+
+## Miksi IoT-laitteet pitää suojata?
+
+IoT-turvallisuus tarkoittaa sen varmistamista, että vain odotetut laitteet voivat yhdistää pilvipalveluusi ja lähettää telemetriatietoja, ja että vain pilvipalvelusi voi lähettää komentoja laitteillesi. IoT-data voi myös olla henkilökohtaista, kuten lääketieteellistä tai arkaluonteista tietoa, joten koko sovelluksen on otettava turvallisuus huomioon, jotta tietoja ei vuoda.
+
+Jos IoT-sovelluksesi ei ole suojattu, siihen liittyy useita riskejä:
+
+* Väärennetty laite voi lähettää virheellisiä tietoja, mikä saa sovelluksesi reagoimaan väärin. Esimerkiksi se voisi lähettää jatkuvasti korkeita maaperän kosteusarvoja, jolloin kastelujärjestelmäsi ei koskaan käynnisty ja kasvit kuolevat veden puutteeseen.
+* Luvattomat käyttäjät voivat lukea IoT-laitteiden tietoja, mukaan lukien henkilökohtaisia tai liiketoiminnan kannalta kriittisiä tietoja.
+* Hakkerit voivat lähettää komentoja ohjaamaan laitetta tavalla, joka voi vahingoittaa laitetta tai siihen liitettyjä laitteistoja.
+* Yhdistämällä IoT-laitteeseen hakkerit voivat käyttää tätä väylänä päästäkseen muihin verkkoihin ja yksityisiin järjestelmiin.
+* Pahantahtoiset käyttäjät voivat päästä käsiksi henkilökohtaisiin tietoihin ja käyttää niitä kiristykseen.
+
+Nämä ovat todellisia tilanteita, joita tapahtuu jatkuvasti. Joitakin esimerkkejä annettiin aiemmissa oppitunneissa, mutta tässä on lisää:
+
+* Vuonna 2018 hakkerit käyttivät avointa WiFi-yhteyspistettä akvaariolämpömittarissa päästäkseen kasinon verkkoon ja varastaakseen tietoja. [The Hacker News - Kasino hakkeroitiin internetiin yhdistetyn akvaariolämpömittarin kautta](https://thehackernews.com/2018/04/iot-hacking-thermometer.html)
+* Vuonna 2016 Mirai Botnet käynnisti palvelunestohyökkäyksen Dyn-palveluntarjoajaa vastaan, mikä kaatoi suuren osan internetistä. Tämä botnet käytti haittaohjelmia yhdistääkseen IoT-laitteisiin, kuten DVR-laitteisiin ja kameroihin, jotka käyttivät oletuskäyttäjänimiä ja -salasanoja. [The Guardian - Historian suurin palvelunestohyökkäys](https://www.theguardian.com/technology/2016/oct/26/ddos-attack-dyn-mirai-botnet)
+* Spiral Toys -yhtiön CloudPets-lelujen käyttäjätietokanta oli julkisesti saatavilla internetissä. [Troy Hunt - CloudPets-lelujen käyttäjätiedot vuotivat ja kiristettiin](https://www.troyhunt.com/data-from-connected-cloudpets-teddy-bears-leaked-and-ransomed-exposing-kids-voice-messages/).
+* Strava-sovellus merkitsi juoksijoita, joita ohitit, ja näytti heidän reittinsä, jolloin tuntemattomat saattoivat selvittää, missä asut. [Kim Komando - Fitness-sovellus voi paljastaa kotisi sijainnin — muuta tämä asetus](https://www.komando.com/security-privacy/strava-fitness-app-privacy/755349/).
+
+✅ Tee tutkimusta: Etsi lisää esimerkkejä IoT-hyökkäyksistä ja tietovuodoista, erityisesti henkilökohtaisiin esineisiin, kuten internetiin yhdistettyihin hammasharjoihin tai vaakoihin, liittyen. Mieti, millaisia vaikutuksia näillä hyökkäyksillä voisi olla uhreihin tai asiakkaisiin.
+
+> 💁 Turvallisuus on valtava aihe, ja tämä oppitunti käsittelee vain perusasioita laitteen yhdistämisestä pilveen. Muita aiheita, joita ei käsitellä, ovat esimerkiksi tietojen muutosten seuranta siirron aikana, laitteiden suora hakkerointi tai laiteasetusten muutokset. IoT-hakkerointi on niin suuri uhka, että työkaluja, kuten [Azure Defender for IoT](https://azure.microsoft.com/services/azure-defender-for-iot/?WT.mc_id=academic-17441-jabenn), on kehitetty. Nämä työkalut ovat samanlaisia kuin tietokoneesi virustorjunta- ja tietoturvatyökalut, mutta ne on suunniteltu pienille, vähävirtaisille IoT-laitteille.
+
+## Salaustekniikka
+
+Kun laite yhdistää IoT-palveluun, se käyttää tunnistetta itsensä tunnistamiseen. Ongelma on, että tämä tunniste voidaan kopioida – hakkeri voisi asettaa haitallisen laitteen käyttämään samaa tunnistetta kuin oikea laite, mutta lähettämään vääriä tietoja.
+
+
+
+Ratkaisu tähän on muuntaa lähetettävät tiedot salattuun muotoon käyttämällä arvoa, joka tunnetaan vain laitteelle ja pilvelle. Tätä prosessia kutsutaan *salaamiseksi*, ja arvoa, jota käytetään tietojen salaamiseen, kutsutaan *salausavaimeksi*.
+
+
+
+Pilvipalvelu voi sitten muuntaa tiedot takaisin luettavaan muotoon prosessilla, jota kutsutaan *purkamiseksi*, käyttäen joko samaa salausavainta tai *purkuavainta*. Jos salattua viestiä ei voida purkaa avaimella, laite on hakkeroitu ja viesti hylätään.
+
+Tätä salaamiseen ja purkamiseen käytettävää tekniikkaa kutsutaan *kryptografiaksi*.
+
+### Varhainen kryptografia
+
+Varhaisimmat kryptografian muodot olivat korvaussalauksia, jotka juontavat juurensa 3 500 vuoden taakse. Korvaussalauksessa yksi kirjain korvataan toisella. Esimerkiksi [Caesarin salaus](https://wikipedia.org/wiki/Caesar_cipher) siirtää aakkosia määritellyn määrän, ja vain salatun viestin lähettäjä ja vastaanottaja tietävät, kuinka monta kirjainta siirretään.
+
+[Vigenèren salaus](https://wikipedia.org/wiki/Vigenère_cipher) vei tämän pidemmälle käyttämällä sanoja tekstin salaamiseen, jolloin alkuperäisen tekstin jokainen kirjain siirrettiin eri määrän verran, eikä aina samaa määrää.
+
+Kryptografiaa käytettiin moniin tarkoituksiin, kuten saviastioiden lasitereseptien suojaamiseen muinaisessa Mesopotamiassa, salaisiin rakkauskirjeisiin Intiassa tai muinaisten egyptiläisten taikaloitsujen pitämiseen salassa.
+
+### Moderni kryptografia
+
+Moderni kryptografia on paljon kehittyneempää, mikä tekee siitä vaikeammin murrettavaa kuin varhaiset menetelmät. Moderni kryptografia käyttää monimutkaista matematiikkaa tietojen salaamiseen, ja mahdollisia avaimia on niin paljon, että raakavoimahyökkäykset eivät ole mahdollisia.
+
+Kryptografiaa käytetään monin tavoin turvalliseen viestintään. Jos luet tätä sivua GitHubissa, saatat huomata, että verkkosivuston osoite alkaa *HTTPS*:llä, mikä tarkoittaa, että viestintä selaimesi ja GitHubin verkkopalvelimien välillä on salattu. Jos joku pystyisi lukemaan internetliikennettä selaimesi ja GitHubin välillä, hän ei pystyisi lukemaan tietoja, koska ne on salattu. Tietokoneesi saattaa jopa salata kaikki kiintolevyn tiedot, joten jos joku varastaa sen, hän ei pysty lukemaan tietojasi ilman salasanaasi.
+
+> 🎓 HTTPS tarkoittaa HyperText Transfer Protocol **Secure**
+
+Valitettavasti kaikki ei ole turvallista. Jotkut laitteet ovat täysin suojaamattomia, toiset on suojattu helposti murrettavilla avaimilla, tai joskus jopa kaikki saman tyyppiset laitteet käyttävät samaa avainta. On raportoitu erittäin henkilökohtaisista IoT-laitteista, joissa kaikilla on sama salasana WiFi- tai Bluetooth-yhteyden muodostamiseen. Jos voit yhdistää omaan laitteeseesi, voit yhdistää myös jonkun toisen laitteeseen. Kun yhteys on muodostettu, voit päästä käsiksi erittäin yksityisiin tietoihin tai hallita heidän laitettaan.
+
+> 💁 Huolimatta modernin kryptografian monimutkaisuudesta ja väitteistä, että salauksen murtaminen voi kestää miljardeja vuosia, kvanttilaskennan nousu on mahdollistanut kaikkien tunnettujen salausten murtamisen erittäin lyhyessä ajassa!
+
+### Symmetriset ja epäsymmetriset avaimet
+
+Salaus jaetaan kahteen tyyppiin – symmetrinen ja epäsymmetrinen.
+
+**Symmetrinen** salaus käyttää samaa avainta tietojen salaamiseen ja purkamiseen. Sekä lähettäjän että vastaanottajan on tiedettävä sama avain. Tämä on vähiten turvallinen tyyppi, koska avain on jaettava jollain tavalla. Jotta lähettäjä voisi lähettää salatun viestin vastaanottajalle, lähettäjän on ensin ehkä lähetettävä avain vastaanottajalle.
+
+
+
+Jos avain varastetaan siirron aikana tai lähettäjä tai vastaanottaja hakkeroidaan ja avain löydetään, salaus voidaan murtaa.
+
+
+
+**Epäsymmetrinen** salaus käyttää kahta avainta – salausavainta ja purkuavainta, joita kutsutaan julkisen ja yksityisen avaimen pariksi. Julkista avainta käytetään viestin salaamiseen, mutta sitä ei voida käyttää sen purkamiseen. Yksityistä avainta käytetään viestin purkamiseen, mutta sitä ei voida käyttää sen salaamiseen.
+
+
+
+Vastaanottaja jakaa julkisen avaimensa, ja lähettäjä käyttää sitä viestin salaamiseen. Kun viesti on lähetetty, vastaanottaja purkaa sen yksityisellä avaimellaan. Epäsymmetrinen salaus on turvallisempi, koska yksityinen avain pidetään vastaanottajan hallussa eikä sitä koskaan jaeta. Julkisen avaimen voi antaa kenelle tahansa, koska sitä voidaan käyttää vain viestien salaamiseen.
+
+Symmetrinen salaus on nopeampaa kuin epäsymmetrinen salaus, mutta epäsymmetrinen on turvallisempaa. Jotkin järjestelmät käyttävät molempia – käyttävät epäsymmetristä salausta symmetrisen avaimen salaamiseen ja jakamiseen, ja sitten symmetristä avainta kaikkien tietojen salaamiseen. Tämä tekee symmetrisen avaimen jakamisesta turvallisempaa lähettäjän ja vastaanottajan välillä ja nopeampaa tietojen salaamisessa ja purkamisessa.
+
+## IoT-laitteiden suojaaminen
+
+IoT-laitteet voidaan suojata käyttämällä symmetristä tai epäsymmetristä salausta. Symmetrinen on helpompi, mutta vähemmän turvallinen.
+
+### Symmetriset avaimet
+
+Kun määritit IoT-laitteesi toimimaan IoT Hubin kanssa, käytit yhteysmerkkijonoa. Esimerkki yhteysmerkkijonosta on:
+
+```output
+HostName=soil-moisture-sensor.azure-devices.net;DeviceId=soil-moisture-sensor;SharedAccessKey=Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=
+```
+
+Tämä yhteysmerkkijono koostuu kolmesta osasta, jotka on erotettu puolipisteillä, ja jokainen osa sisältää avaimen ja arvon:
+
+| Avain | Arvo | Kuvaus |
+| --- | ----- | ----------- |
+| HostName | `soil-moisture-sensor.azure-devices.net` | IoT Hubin URL |
+| DeviceId | `soil-moisture-sensor` | Laitteen yksilöllinen tunniste |
+| SharedAccessKey | `Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=` | Symmetrinen avain, joka tunnetaan sekä laitteen että IoT Hubin toimesta |
+
+Yhteysmerkkijonon viimeinen osa, `SharedAccessKey`, on symmetrinen avain, jonka sekä laite että IoT Hub tuntevat. Tätä avainta ei koskaan lähetetä laitteelta pilveen tai pilvestä laitteelle. Sen sijaan sitä käytetään lähetettävien tai vastaanotettavien tietojen salaamiseen.
+
+✅ Tee kokeilu. Mitä luulet tapahtuvan, jos muutat yhteysmerkkijonon `SharedAccessKey`-osaa, kun yhdistät IoT-laitteesi? Kokeile ja katso.
+
+Kun laite yrittää ensimmäisen kerran yhdistää, se lähettää jaetun pääsytunnuksen (SAS), joka koostuu IoT Hubin URL-osoitteesta, aikaleimasta, jolloin pääsytunnus vanhenee (yleensä yksi päivä nykyhetkestä), ja allekirjoituksesta. Tämä allekirjoitus koostuu URL-osoitteesta ja vanhenemisajasta, jotka on salattu yhteysmerkkijonon jaetulla pääsyavaimella.
+
+IoT Hub purkaa tämän allekirjoituksen jaetulla pääsyavaimella, ja jos purettu arvo vastaa URL-osoitetta ja vanhenemisaikaa, laite saa yhdistää. Se myös tarkistaa, että nykyinen aika on ennen vanhenemisaikaa, jotta haitallinen laite ei voi siepata oikean laitteen SAS-tunnusta ja käyttää sitä.
+
+Tämä on elegantti tapa varmistaa, että lähettäjä on oikea laite. Lähettämällä joitakin tunnettuja tietoja sekä salaamattomassa että salatussa muodossa palvelin voi varmistaa laitteen tarkistamalla, että kun se purkaa salatut tiedot, tulos vastaa lähetettyä salaamatonta versiota. Jos ne vastaavat, sekä lähettäjällä että vastaanottajalla on sama symmetrinen salausavain.
+💁 Koska IoT-laitteen käyttöaika vanhenee, sen täytyy tietää tarkka aika, joka yleensä haetaan [NTP](https://wikipedia.org/wiki/Network_Time_Protocol)-palvelimelta. Jos aika ei ole tarkka, yhteys epäonnistuu.
+Kun yhteys on muodostettu, kaikki IoT Hubiin laitteelta lähetetty data tai IoT Hubista laitteelle lähetetty data salataan jaettuun pääsyavaimeen perustuen.
+
+✅ Mitä luulet tapahtuvan, jos useat laitteet jakavat saman yhteysmerkkijonon?
+
+> 💁 On huono tietoturvakäytäntö tallentaa tämä avain koodiin. Jos hakkeri saa lähdekoodisi haltuunsa, hän voi saada avaimen. Lisäksi koodin julkaiseminen on vaikeampaa, koska jokaiselle laitteelle tarvitaan päivitetty avain, mikä vaatii koodin uudelleenkääntämistä. On parempi ladata tämä avain laitteiston turvamoduulista - IoT-laitteessa olevasta sirusta, joka tallentaa salattuja arvoja, joita koodi voi lukea.
+>
+> IoT:n oppimisen yhteydessä avaimen laittaminen koodiin, kuten teit aiemmassa oppitunnissa, on usein helpompaa, mutta sinun on varmistettava, ettei tätä avainta tallenneta julkiseen lähdekoodin hallintaan.
+
+Laitteilla on kaksi avainta ja kaksi vastaavaa yhteysmerkkijonoa. Tämä mahdollistaa avainten kierrätyksen - eli siirtymisen yhdestä avaimesta toiseen, jos ensimmäinen vaarantuu, ja ensimmäisen avaimen uudelleenluomisen.
+
+### X.509-sertifikaatit
+
+Kun käytät epäsymmetristä salausta julkisen ja yksityisen avainparin kanssa, sinun on annettava julkinen avain kaikille, jotka haluavat lähettää sinulle dataa. Ongelma on, miten avaimen vastaanottaja voi olla varma, että kyseessä on juuri sinun julkinen avain, eikä joku muu, joka teeskentelee olevansa sinä? Sen sijaan, että tarjoaisit avaimen, voit tarjota julkisen avaimen sertifikaatin sisällä, joka on luotettavan kolmannen osapuolen, nimeltään X.509-sertifikaatti, vahvistama.
+
+X.509-sertifikaatit ovat digitaalisia asiakirjoja, jotka sisältävät julkisen avainparin julkisen osan. Ne ovat yleensä luotettavien organisaatioiden, nimeltään [sertifikaattiviranomaiset](https://wikipedia.org/wiki/Certificate_authority) (CAs), myöntämiä ja digitaalisesti allekirjoittamia, mikä osoittaa, että avain on voimassa ja tulee sinulta. Luotat sertifikaattiin ja siihen, että julkinen avain on peräisin siitä, keneltä sertifikaatti väittää sen olevan, koska luotat CA:han, samalla tavalla kuin luottaisit passiin tai ajokorttiin, koska luotat sen myöntäneeseen maahan. Sertifikaatit maksavat rahaa, joten voit myös "itse allekirjoittaa", eli luoda sertifikaatin itse ja allekirjoittaa sen itse testitarkoituksiin.
+
+> 💁 Itse allekirjoitettua sertifikaattia ei koskaan tulisi käyttää tuotantoversiossa.
+
+Näissä sertifikaateissa on useita kenttiä, mukaan lukien keneltä julkinen avain on peräisin, CA:n tiedot, joka on myöntänyt sen, kuinka kauan se on voimassa, ja itse julkinen avain. Ennen sertifikaatin käyttöä on hyvä käytäntö varmistaa sen aitous tarkistamalla, että alkuperäinen CA on allekirjoittanut sen.
+
+✅ Voit lukea täydellisen luettelon sertifikaatin kentistä [Microsoftin X.509-julkisten avainsertifikaattien opetusohjelmasta](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-certificates?WT.mc_id=academic-17441-jabenn#certificate-fields).
+
+Kun käytät X.509-sertifikaatteja, sekä lähettäjällä että vastaanottajalla on omat julkiset ja yksityiset avaimensa, sekä X.509-sertifikaatit, jotka sisältävät julkisen avaimen. He vaihtavat X.509-sertifikaatteja jollain tavalla, käyttäen toistensa julkisia avaimia salatakseen lähettämänsä datan ja omia yksityisiä avaimiaan purkaakseen vastaanottamansa datan.
+
+
+
+Yksi suuri etu X.509-sertifikaattien käytössä on, että niitä voidaan jakaa laitteiden välillä. Voit luoda yhden sertifikaatin, ladata sen IoT Hubiin ja käyttää sitä kaikille laitteillesi. Jokaisen laitteen tarvitsee vain tietää yksityinen avain purkaakseen IoT Hubista vastaanottamansa viestit.
+
+Laitteen käyttämä sertifikaatti viestien salaamiseen, jotka se lähettää IoT Hubiin, on Microsoftin julkaisema. Se on sama sertifikaatti, jota monet Azure-palvelut käyttävät, ja se on joskus sisäänrakennettu SDK:ihin.
+
+> 💁 Muista, että julkinen avain on juuri sitä - julkinen. Azure-julkista avainta voidaan käyttää vain Azureen lähetettävän datan salaamiseen, ei sen purkamiseen, joten sitä voidaan jakaa kaikkialla, myös lähdekoodissa. Esimerkiksi voit nähdä sen [Azure IoT C SDK:n lähdekoodissa](https://github.com/Azure/azure-iot-sdk-c/blob/master/certs/certs.c).
+
+✅ X.509-sertifikaateissa on paljon ammattikieltä. Voit lukea joidenkin termien määritelmät [Microsoftin X.509-sertifikaattien ammattikielen oppaasta](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).
+
+## Luo ja käytä X.509-sertifikaattia
+
+X.509-sertifikaatin luomisen vaiheet ovat:
+
+1. Luo julkisen ja yksityisen avaimen pari. Yksi yleisimmin käytetyistä algoritmeista julkisen ja yksityisen avainparin luomiseen on nimeltään [Rivest–Shamir–Adleman](https://wikipedia.org/wiki/RSA_(cryptosystem))(RSA).
+
+1. Lähetä julkinen avain ja siihen liittyvät tiedot allekirjoitettavaksi, joko CA:lle tai itse allekirjoittamalla.
+
+Azure CLI:ssä on komentoja uuden laitteen identiteetin luomiseen IoT Hubissa, julkisen ja yksityisen avainparin automaattiseen luomiseen ja itse allekirjoitetun sertifikaatin luomiseen.
+
+> 💁 Jos haluat nähdä vaiheet yksityiskohtaisesti sen sijaan, että käyttäisit Azure CLI:tä, löydät ne [Microsoft IoT Hub -dokumentaation OpenSSL:n käyttöoppaasta itse allekirjoitettujen sertifikaattien luomiseen](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-self-sign?WT.mc_id=academic-17441-jabenn).
+
+### Tehtävä - luo laitteen identiteetti X.509-sertifikaatin avulla
+
+1. Suorita seuraava komento rekisteröidäksesi uuden laitteen identiteetin, joka luo automaattisesti avaimet ja sertifikaatit:
+
+ ```sh
+ az iot hub device-identity create --device-id soil-moisture-sensor-x509 \
+ --am x509_thumbprint \
+ --output-dir . \
+ --hub-name
+ ```
+
+ Korvaa `` IoT Hubille antamallasi nimellä.
+
+ Tämä luo laitteen, jonka tunnus on `soil-moisture-sensor-x509`, erottamaan sen identiteetistä, jonka loit edellisessä oppitunnissa. Tämä komento luo myös kaksi tiedostoa nykyiseen hakemistoon:
+
+ * `soil-moisture-sensor-x509-key.pem` - tämä tiedosto sisältää laitteen yksityisen avaimen.
+ * `soil-moisture-sensor-x509-cert.pem` - tämä on laitteen X.509-sertifikaattitiedosto.
+
+ Pidä nämä tiedostot turvassa! Yksityistä avaintiedostoa ei tulisi tallentaa julkiseen lähdekoodin hallintaan.
+
+### Tehtävä - käytä X.509-sertifikaattia laitteen koodissa
+
+Käy läpi asiaankuuluva opas IoT-laitteen yhdistämiseksi pilveen X.509-sertifikaatin avulla:
+
+* [Arduino - Wio Terminal](wio-terminal-x509.md)
+* [Yksikorttitietokone - Raspberry Pi/virtuaalinen IoT-laite](single-board-computer-x509.md)
+
+---
+
+## 🚀 Haaste
+
+Azure-palveluiden, kuten resurssiryhmien ja IoT Hubien, luomiseen, hallintaan ja poistamiseen on useita tapoja. Yksi tapa on [Azure Portal](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) - verkkopohjainen käyttöliittymä, joka tarjoaa graafisen käyttöliittymän Azure-palveluiden hallintaan.
+
+Siirry [portal.azure.com](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) ja tutki portaalia. Katso, voitko luoda IoT Hubin portaalin avulla ja poistaa sen.
+
+**Vinkki** - kun luot palveluita portaalin kautta, sinun ei tarvitse luoda resurssiryhmää etukäteen, vaan se voidaan luoda palvelua luodessa. Varmista, että poistat sen, kun olet valmis!
+
+Voit löytää runsaasti dokumentaatiota, opetusohjelmia ja oppaita Azure-portaalista [Azure-portaalin dokumentaatiosta](https://docs.microsoft.com/azure/azure-portal/?WT.mc_id=academic-17441-jabenn).
+
+## Oppitunnin jälkeinen kysely
+
+[Oppitunnin jälkeinen kysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/20)
+
+## Kertaus ja itseopiskelu
+
+* Lue kryptografian historiaa [Wikipedia-sivulta kryptografian historia](https://wikipedia.org/wiki/History_of_cryptography).
+* Lue X.509-sertifikaateista [Wikipedia-sivulta X.509](https://wikipedia.org/wiki/X.509).
+
+## Tehtävä
+
+[Rakenna uusi IoT-laite](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/6-keep-your-plant-secure/assignment.md b/translations/fi/2-farm/lessons/6-keep-your-plant-secure/assignment.md
new file mode 100644
index 00000000..5a5847a9
--- /dev/null
+++ b/translations/fi/2-farm/lessons/6-keep-your-plant-secure/assignment.md
@@ -0,0 +1,29 @@
+
+# Rakenna uusi IoT-laite
+
+## Ohjeet
+
+Viimeisten kuuden oppitunnin aikana olet oppinut digitaalisen maatalouden perusteita ja kuinka käyttää IoT-laitteita datan keräämiseen kasvien kasvun ennustamiseksi sekä kastelun automatisoimiseksi maaperän kosteuden mittausten perusteella.
+
+Hyödynnä oppimaasi rakentaaksesi uuden IoT-laitteen, joka käyttää valitsemaasi sensoria ja toimilaitetta. Lähetä telemetriatiedot IoT Hubiin ja käytä niitä toimilaitteen ohjaamiseen palvelimettoman koodin avulla. Voit käyttää sensoria ja toimilaitetta, joita olet jo käyttänyt tässä tai edellisessä projektissa, tai jos sinulla on muuta laitteistoa, kokeile jotain uutta.
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan |
+| -------- | ----------- | -------- | -------------------- |
+| IoT-laitteen koodaus sensorin ja toimilaitteen käyttöön | Koodattu IoT-laite, joka toimii sensorin ja toimilaitteen kanssa | Koodattu IoT-laite, joka toimii sensorin tai toimilaitteen kanssa | Ei onnistunut koodaamaan IoT-laitetta sensorin tai toimilaitteen käyttöön |
+| IoT-laitteen yhdistäminen IoT Hubiin | Onnistui ottamaan käyttöön IoT Hubin, lähettämään telemetriatiedot siihen ja vastaanottamaan komentoja siitä | Onnistui ottamaan käyttöön IoT Hubin ja joko lähettämään telemetriatiedot tai vastaanottamaan komentoja | Ei onnistunut ottamaan käyttöön IoT Hubia eikä kommunikoimaan sen kanssa IoT-laitteesta |
+| Toimilaitteen ohjaaminen palvelimettoman koodin avulla | Onnistui ottamaan käyttöön Azure Functionin, joka ohjaa laitetta telemetriatapahtumien perusteella | Onnistui ottamaan käyttöön Azure Functionin, joka aktivoituu telemetriatapahtumista, mutta ei onnistunut ohjaamaan toimilaitetta | Ei onnistunut ottamaan käyttöön Azure Functionia |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md b/translations/fi/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md
new file mode 100644
index 00000000..4f38140d
--- /dev/null
+++ b/translations/fi/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md
@@ -0,0 +1,71 @@
+
+# Käytä X.509-sertifikaattia laitteesi koodissa - Virtuaalinen IoT-laitteisto ja Raspberry Pi
+
+Tässä osassa oppituntia yhdistät virtuaalisen IoT-laitteesi tai Raspberry Pi:n IoT Hubiin X.509-sertifikaatin avulla.
+
+## Yhdistä laitteesi IoT Hubiin
+
+Seuraava vaihe on yhdistää laitteesi IoT Hubiin X.509-sertifikaattien avulla.
+
+### Tehtävä - yhdistä IoT Hubiin
+
+1. Kopioi avain- ja sertifikaattitiedostot kansioon, jossa IoT-laitteesi koodi sijaitsee. Jos käytät Raspberry Pi:tä VS Code Remote SSH:n kautta ja loit avaimet PC:lläsi tai Macillasi, voit vetää ja pudottaa tiedostot VS Code -tiedostonhallintaan kopioidaksesi ne.
+
+1. Avaa tiedosto `app.py`
+
+1. Jotta voit yhdistää X.509-sertifikaatin avulla, tarvitset IoT Hubin isäntänimen ja X.509-sertifikaatin. Aloita luomalla muuttuja, joka sisältää isäntänimen, lisäämällä seuraava koodi ennen laitteen asiakasohjelman luomista:
+
+ ```python
+ host_name = ""
+ ```
+
+ Korvaa `` IoT Hubisi isäntänimellä. Löydät sen `HostName`-kohdasta `connection_string`-muuttujassa. Se on IoT Hubisi nimi, joka päättyy `.azure-devices.net`.
+
+1. Tämän alle, määritä muuttuja laitteen ID:lle:
+
+ ```python
+ device_id = "soil-moisture-sensor-x509"
+ ```
+
+1. Tarvitset `X509`-luokan instanssin, joka sisältää X.509-tiedostot. Lisää `X509` niiden luokkien listaan, jotka tuodaan `azure.iot.device`-moduulista:
+
+ ```python
+ from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse, X509
+ ```
+
+1. Luo `X509`-luokan instanssi sertifikaatti- ja avaintiedostojesi avulla lisäämällä tämä koodi `host_name`-määrittelyn alle:
+
+ ```python
+ x509 = X509("./soil-moisture-sensor-x509-cert.pem", "./soil-moisture-sensor-x509-key.pem")
+ ```
+
+ Tämä luo `X509`-luokan käyttäen tiedostoja `soil-moisture-sensor-x509-cert.pem` ja `soil-moisture-sensor-x509-key.pem`, jotka loit aiemmin.
+
+1. Korvaa koodirivi, joka luo `device_client`-instanssin yhteysmerkkijonosta, seuraavalla:
+
+ ```python
+ device_client = IoTHubDeviceClient.create_from_x509_certificate(x509, host_name, device_id)
+ ```
+
+ Tämä yhdistää X.509-sertifikaatin avulla yhteysmerkkijonon sijaan.
+
+1. Poista rivi, jossa määritellään `connection_string`-muuttuja.
+
+1. Suorita koodisi. Seuraa IoT Hubiin lähetettyjä viestejä ja lähetä suoria metodipyyntöjä kuten aiemmin. Näet laitteen yhdistyvän ja lähettävän maaperän kosteuden lukemia sekä vastaanottavan suoria metodipyyntöjä.
+
+> 💁 Löydät tämän koodin [code/pi](../../../../../2-farm/lessons/6-keep-your-plant-secure/code/pi) tai [code/virtual-device](../../../../../2-farm/lessons/6-keep-your-plant-secure/code/virtual-device) -kansiosta.
+
+😀 Maaperän kosteusanturin ohjelmasi on yhdistetty IoT Hubiin X.509-sertifikaatin avulla!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md b/translations/fi/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md
new file mode 100644
index 00000000..817c19fb
--- /dev/null
+++ b/translations/fi/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md
@@ -0,0 +1,17 @@
+
+# Käytä X.509-sertifikaattia laitteesi koodissa - Wio Terminal
+
+Kirjoitushetkellä Azure Arduino SDK ei tue X.509-sertifikaatteja. Jos haluat kokeilla X.509-sertifikaatteja, voit viitata [Virtuaalisen IoT-laitteen ohjeisiin Python SDK:ta käyttäen](single-board-computer-x509.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/3-transport/README.md b/translations/fi/3-transport/README.md
new file mode 100644
index 00000000..5cc304cb
--- /dev/null
+++ b/translations/fi/3-transport/README.md
@@ -0,0 +1,38 @@
+
+# Kuljetus tilalta tehtaalle - IoT:n käyttö ruoan toimitusten seuraamiseen
+
+Monet viljelijät kasvattavat ruokaa myyntiin – joko he ovat kaupallisia viljelijöitä, jotka myyvät kaiken kasvattamansa, tai omavaraisviljelijöitä, jotka myyvät ylimääräisen sadon hankkiakseen välttämättömyyksiä. Jollain tavalla ruoka on saatava tilalta kuluttajalle, ja tämä tapahtuu yleensä massakuljetuksilla tiloilta keskuksiin tai jalostuslaitoksiin ja sieltä kauppoihin. Esimerkiksi tomaattiviljelijä korjaa tomaatit, pakkaa ne laatikoihin, lastaa laatikot kuorma-autoon ja toimittaa ne jalostuslaitokseen. Tomaatit lajitellaan, ja sen jälkeen ne toimitetaan kuluttajille jalostettuna ruokana, vähittäismyynnin kautta tai ravintoloissa nautittavaksi.
+
+IoT voi auttaa tässä toimitusketjussa seuraamalla ruoan kuljetusta – varmistamalla, että kuljettajat ovat oikeilla reiteillä, seuraamalla ajoneuvojen sijainteja ja lähettämällä ilmoituksia, kun ajoneuvot saapuvat, jotta ruoka voidaan purkaa ja valmistella jalostettavaksi mahdollisimman nopeasti.
+
+> 🎓 *Toimitusketju* tarkoittaa toimintojen sarjaa, jolla jokin tuote valmistetaan ja toimitetaan. Esimerkiksi tomaattiviljelyssä se kattaa siementen, maan, lannoitteiden ja veden hankinnan, tomaattien kasvattamisen, niiden toimittamisen keskuskeskukseen, kuljettamisen supermarketin paikalliseen keskukseen, kuljettamisen yksittäiseen supermarkettiin, esillepanon, myynnin kuluttajalle ja kotiin viemisen syötäväksi. Jokainen vaihe on kuin lenkki ketjussa.
+
+> 🎓 Toimitusketjun kuljetusosuutta kutsutaan *logistiikaksi*.
+
+Näissä neljässä oppitunnissa opit, kuinka voit hyödyntää esineiden internetiä (IoT) parantaaksesi toimitusketjua seuraamalla ruokaa, kun se lastataan (virtuaaliseen) kuorma-autoon, jota seurataan sen matkalla määränpäähänsä. Opit GPS-seurannasta, GPS-datan tallentamisesta ja visualisoinnista sekä siitä, kuinka saat ilmoituksen, kun kuorma-auto saapuu määränpäähänsä.
+
+> 💁 Näissä oppitunneissa käytetään joitakin pilvipalveluresursseja. Jos et suorita kaikkia tämän projektin oppitunteja, muista [siivota projektisi](../clean-up.md).
+
+## Aiheet
+
+1. [Sijainnin seuranta](lessons/1-location-tracking/README.md)
+1. [Sijaintidatan tallentaminen](lessons/2-store-location-data/README.md)
+1. [Sijaintidatan visualisointi](lessons/3-visualize-location-data/README.md)
+1. [Geoaidat](lessons/4-geofences/README.md)
+
+## Tekijät
+
+Kaikki oppitunnit on kirjoitettu ♥️:lla [Jen Looperin](https://github.com/jlooper) ja [Jim Bennettin](https://GitHub.com/JimBobBennett) toimesta.
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/3-transport/lessons/1-location-tracking/README.md b/translations/fi/3-transport/lessons/1-location-tracking/README.md
new file mode 100644
index 00000000..3210e020
--- /dev/null
+++ b/translations/fi/3-transport/lessons/1-location-tracking/README.md
@@ -0,0 +1,216 @@
+
+# Sijainnin seuranta
+
+
+
+> Luonnoskuva: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/21)
+
+## Johdanto
+
+Ruokatuotteiden kuljetus viljelijältä kuluttajalle sisältää prosessin, jossa laatikot lastataan kuorma-autoihin, laivoihin, lentokoneisiin tai muihin kaupallisiin kuljetusvälineisiin ja toimitetaan ruokaa jonnekin – joko suoraan asiakkaalle tai keskitettyyn varastoon tai käsittelykeskukseen. Koko prosessi viljelijältä kuluttajalle on osa *toimitusketjua*. Alla oleva video Arizonan osavaltion yliopiston W. P. Carey School of Business -koulusta käsittelee toimitusketjun ideaa ja sen hallintaa tarkemmin.
+
+[](https://www.youtube.com/watch?v=Mi1QBxVjZAw)
+
+> 🎥 Klikkaa yllä olevaa kuvaa katsoaksesi videon
+
+IoT-laitteiden lisääminen voi merkittävästi parantaa toimitusketjua, jolloin voit hallita, missä tuotteet ovat, suunnitella kuljetusta ja tavaroiden käsittelyä paremmin sekä reagoida nopeammin ongelmiin.
+
+Kun hallitset ajoneuvokalustoa, kuten kuorma-autoja, on hyödyllistä tietää, missä kukin ajoneuvo on milloin tahansa. Ajoneuvoihin voidaan asentaa GPS-antureita, jotka lähettävät sijaintinsa IoT-järjestelmiin, jolloin omistajat voivat paikantaa ajoneuvon, nähdä sen kulkeman reitin ja tietää, milloin se saapuu määränpäähänsä. Useimmat ajoneuvot toimivat WiFi-yhteyden ulkopuolella, joten ne käyttävät matkapuhelinverkkoja tämän tyyppisen datan lähettämiseen. Joskus GPS-anturi on osa monimutkaisempia IoT-laitteita, kuten elektronisia lokikirjoja. Nämä laitteet seuraavat, kuinka kauan kuorma-auto on ollut matkalla, jotta kuljettajat noudattavat paikallisia työaikalakeja.
+
+Tässä oppitunnissa opit seuraamaan ajoneuvon sijaintia käyttämällä Global Positioning System (GPS) -anturia.
+
+Tässä oppitunnissa käsitellään:
+
+* [Yhdistetyt ajoneuvot](../../../../../3-transport/lessons/1-location-tracking)
+* [Paikkatiedon koordinaatit](../../../../../3-transport/lessons/1-location-tracking)
+* [Global Positioning Systems (GPS)](../../../../../3-transport/lessons/1-location-tracking)
+* [GPS-anturidatan lukeminen](../../../../../3-transport/lessons/1-location-tracking)
+* [NMEA GPS-data](../../../../../3-transport/lessons/1-location-tracking)
+* [GPS-anturidatan dekoodaus](../../../../../3-transport/lessons/1-location-tracking)
+
+## Yhdistetyt ajoneuvot
+
+IoT muuttaa tavaroiden kuljetusta luomalla *yhdistettyjen ajoneuvojen* kalustoja. Nämä ajoneuvot ovat yhteydessä keskitettyihin IT-järjestelmiin ja raportoivat sijaintinsa sekä muita anturidatoja. Yhdistettyjen ajoneuvojen kalustolla on monia etuja:
+
+* Sijainnin seuranta – voit paikantaa ajoneuvon sijainnin milloin tahansa, jolloin voit:
+
+ * Saada ilmoituksia, kun ajoneuvo on saapumassa määränpäähänsä, jotta purkutiimi voi valmistautua
+ * Paikantaa varastetut ajoneuvot
+ * Yhdistää sijainti- ja reittidatan liikenneongelmiin, jolloin voit muuttaa ajoneuvon reittiä kesken matkan
+ * Noudattaa verolakeja. Joissakin maissa ajoneuvoilta peritään vero julkisilla teillä ajetun kilometrimäärän perusteella (kuten [Uuden-Seelannin RUC](https://www.nzta.govt.nz/vehicles/licensing-rego/road-user-charges/)), joten tieto siitä, milloin ajoneuvo on julkisilla teillä vs yksityisillä teillä, helpottaa verojen laskemista.
+ * Tietää, minne lähettää huoltotiimi ajoneuvon rikkoutuessa
+
+* Kuljettajan telemetria – varmistaa, että kuljettajat noudattavat nopeusrajoituksia, ajavat mutkissa sopivalla nopeudella, jarruttavat ajoissa ja tehokkaasti sekä ajavat turvallisesti. Yhdistetyissä ajoneuvoissa voi myös olla kameroita, jotka tallentavat tapahtumia. Tämä voidaan yhdistää vakuutuksiin, jolloin hyvät kuljettajat saavat alennettuja hintoja.
+
+* Kuljettajan työaikojen noudattaminen – varmistaa, että kuljettajat ajavat vain laillisesti sallittujen tuntien ajan moottorin käynnistys- ja sammutusaikojen perusteella.
+
+Näitä etuja voidaan yhdistää – esimerkiksi yhdistämällä kuljettajan työaikojen noudattaminen sijainnin seurantaan, jolloin kuljettajat voidaan ohjata uudelleen, jos he eivät voi saavuttaa määränpäätään sallittujen ajoaikojen puitteissa. Näitä voidaan myös yhdistää muihin ajoneuvokohtaisiin telemetriatietoihin, kuten lämpötilatietoihin lämpötilasäädellyistä kuorma-autoista, jolloin ajoneuvot voidaan ohjata uudelleen, jos nykyinen reitti estäisi tavaroiden säilyttämisen oikeassa lämpötilassa.
+
+> 🎓 Logistiikka on prosessi, jossa tavaroita kuljetetaan paikasta toiseen, esimerkiksi viljelijältä supermarkettiin yhden tai useamman varaston kautta. Viljelijä pakkaa tomaattilaatikoita, jotka lastataan kuorma-autoon, toimitetaan keskitettyyn varastoon ja siirretään toiseen kuorma-autoon, joka voi sisältää sekoituksen eri tyyppisiä tuotteita, jotka sitten toimitetaan supermarkettiin.
+
+Ajoneuvojen seurannan ydinosa on GPS – anturit, jotka voivat paikantaa sijaintinsa missä tahansa maapallolla. Tässä oppitunnissa opit käyttämään GPS-anturia, alkaen siitä, miten sijainti määritellään maapallolla.
+
+## Paikkatiedon koordinaatit
+
+Paikkatiedon koordinaatteja käytetään määrittämään pisteitä maapallon pinnalla, samalla tavalla kuin koordinaatteja voidaan käyttää piirtämään pikseli tietokoneen näytölle tai sijoittamaan pistoja ristipistotyöhön. Yksittäiselle pisteelle on parikoordinaatit. Esimerkiksi Microsoftin kampus Redmondissa, Washingtonissa, Yhdysvalloissa sijaitsee koordinaateissa 47.6423109, -122.1390293.
+
+### Leveys- ja pituusasteet
+
+Maapallo on pallo – kolmiulotteinen ympyrä. Tämän vuoksi pisteet määritellään jakamalla se 360 asteeseen, sama kuin ympyrän geometria. Leveysaste mittaa astemäärän pohjoisesta etelään, pituusaste mittaa astemäärän idästä länteen.
+
+> 💁 Kukaan ei oikeastaan tiedä alkuperäistä syytä siihen, miksi ympyrät jaetaan 360 asteeseen. [Wikipedia-sivu asteista (kulma)](https://wikipedia.org/wiki/Degree_(angle)) käsittelee joitakin mahdollisia syitä.
+
+
+
+Leveysaste mitataan linjoilla, jotka kiertävät maapallon ja kulkevat rinnakkain päiväntasaajan kanssa, jakaen pohjoisen ja eteläisen pallonpuoliskon 90° kumpaankin. Päiväntasaaja on 0°, pohjoisnapa on 90°, joka tunnetaan myös nimellä 90° pohjoista, ja etelänapa on -90°, eli 90° etelää.
+
+Pituusaste mitataan astemääränä itään ja länteen. Pituusasteen 0° alkuperä, *päämeridiaani*, määriteltiin vuonna 1884 linjaksi, joka kulkee pohjoisnavalta etelänavalle ja kulkee [Britannian kuninkaallisen observatorion Greenwichissä, Englannissa](https://wikipedia.org/wiki/Royal_Observatory,_Greenwich).
+
+
+
+> 🎓 Meridiaani on kuvitteellinen suora linja, joka kulkee pohjoisnavalta etelänavalle muodostaen puolikaaren.
+
+Pituusasteen mittaamiseksi pisteelle mitataan astemäärä päiväntasaajalla päämeridiaanista meridiaaniin, joka kulkee kyseisen pisteen läpi. Pituusaste vaihtelee -180°:sta, eli 180° länteen, 0°:een päämeridiaanilla, 180°:een, eli 180° itään. 180° ja -180° viittaavat samaan pisteeseen, antimeridiaaniin tai 180. meridiaaniin. Tämä on meridiaani maapallon vastakkaisella puolella päämeridiaanista.
+
+> 💁 Antimeridiaania ei pidä sekoittaa kansainväliseen päivämäärärajaan, joka sijaitsee suunnilleen samassa kohdassa, mutta ei ole suora linja ja vaihtelee geopoliittisten rajojen mukaan.
+
+✅ Tee tutkimusta: Yritä löytää nykyisen sijaintisi leveys- ja pituusasteet.
+
+### Asteet, minuutit ja sekunnit vs desimaaliasteet
+
+Perinteisesti leveys- ja pituusasteiden mittaukset tehtiin seksagesimaalilukujärjestelmällä, eli 60-kantaisella järjestelmällä, jota muinaiset babylonialaiset käyttivät ensimmäisissä ajan ja etäisyyden mittauksissa ja tallennuksissa. Käytät seksagesimaalijärjestelmää todennäköisesti päivittäin huomaamatta sitä – jakamalla tunnit 60 minuuttiin ja minuutit 60 sekuntiin.
+
+Pituus- ja leveysasteet mitataan asteina, minuutteina ja sekunteina, jolloin yksi minuutti on 1/60 astetta ja yksi sekunti on 1/60 minuuttia.
+
+Esimerkiksi päiväntasaajalla:
+
+* 1° leveysastetta on **111,3 kilometriä**
+* 1 minuutti leveysastetta on 111,3/60 = **1,855 kilometriä**
+* 1 sekunti leveysastetta on 1,855/60 = **0,031 kilometriä**
+
+Minuutin symboli on yksittäinen heittomerkki, sekunnin symboli on kaksoisheittomerkki. Esimerkiksi 2 astetta, 17 minuuttia ja 43 sekuntia kirjoitettaisiin 2°17'43". Sekunnin osat annetaan desimaaleina, esimerkiksi puoli sekuntia on 0°0'0.5".
+
+Tietokoneet eivät toimi 60-kantaisella järjestelmällä, joten nämä koordinaatit annetaan desimaaliasteina, kun GPS-dataa käytetään useimmissa tietokonejärjestelmissä. Esimerkiksi 2°17'43" on 2.295277. Asteen symboli jätetään yleensä pois.
+
+Pisteen koordinaatit annetaan aina muodossa `leveysaste, pituusaste`, joten aiemmin mainittu esimerkki Microsoftin kampuksesta 47.6423109,-122.117198 sisältää:
+
+* Leveysasteen 47.6423109 (47.6423109 astetta pohjoiseen päiväntasaajasta)
+* Pituusasteen -122.1390293 (122.1390293 astetta länteen päämeridiaanista).
+
+
+
+## Global Positioning Systems (GPS)
+
+GPS-järjestelmät käyttävät useita satelliitteja, jotka kiertävät maapalloa, paikantaakseen sijaintisi. Olet todennäköisesti käyttänyt GPS-järjestelmiä huomaamattasi – löytääksesi sijaintisi puhelimen karttasovelluksessa, kuten Apple Maps tai Google Maps, tai nähdäksesi, missä kyytisi on kyytipalvelusovelluksessa, kuten Uber tai Lyft, tai käyttäessäsi satelliittinavigointia (sat-nav) autossasi.
+
+> 🎓 'Satelliittinavigoinnin' satelliitit ovat GPS-satelliitteja!
+
+GPS-järjestelmät toimivat siten, että useat satelliitit lähettävät signaalin, joka sisältää kunkin satelliitin nykyisen sijainnin ja tarkan aikaleiman. Nämä signaalit lähetetään radiotaajuuksilla ja havaitaan GPS-anturin antennilla. GPS-anturi havaitsee nämä signaalit ja käyttää nykyistä aikaa mitatakseen, kuinka kauan signaalin saapuminen satelliitista anturiin kesti. Koska radiotaajuuksien nopeus on vakio, GPS-anturi voi käyttää lähetettyä aikaleimaa määrittääkseen, kuinka kaukana anturi on satelliitista. Yhdistämällä vähintään 3 satelliitin tiedot lähetettyjen sijaintien kanssa GPS-anturi pystyy paikantamaan sijaintinsa maapallolla.
+
+> 💁 GPS-anturit tarvitsevat antenneja havaitakseen radiotaajuuksia. Kuorma-autoihin ja autoihin sisäänrakennettujen GPS-järjestelmien antennit on sijoitettu hyvän signaalin saamiseksi, yleensä tuulilasiin tai katolle. Jos käytät erillistä GPS-järjestelmää, kuten älypuhelinta tai IoT-laitetta, sinun on varmistettava, että GPS-järjestelmään tai puhelimeen sisäänrakennettu antenni on selkeästi näkyvissä taivaalle, esimerkiksi tuulilasilla.
+
+
+
+GPS-satelliitit kiertävät maapalloa, eivät ole kiinteässä pisteessä anturin yläpuolella, joten sijaintitieto sisältää korkeuden merenpinnan yläpuolella sekä leveys- ja pituusasteen.
+
+GPS:llä oli aiemmin Yhdysvaltain armeijan asettamia tarkkuusrajoituksia, jotka rajoittivat tarkkuuden noin 5 metriin. Tämä rajoitus poistettiin vuonna 2000, jolloin tarkkuus parani 30 senttimetriin. Tämän tarkkuuden saavuttaminen ei kuitenkaan aina ole mahdollista signaalien häiriöiden vuoksi.
+
+✅ Jos sinulla on älypuhelin, avaa karttasovellus ja katso, kuinka tarkka sijaintisi on. Puhelimellasi voi kestää hetki havaita useita satelliitteja saadakseen tarkemman sijainnin.
+💁 Satelliitit sisältävät atomikelloja, jotka ovat äärimmäisen tarkkoja, mutta ne poikkeavat 38 mikrosekuntia (0,0000038 sekuntia) päivässä verrattuna Maan atomikelloihin, koska aika hidastuu nopeuden kasvaessa, kuten Einsteinin erityis- ja yleisen suhteellisuusteorian ennustukset osoittavat - satelliitit liikkuvat nopeammin kuin Maan pyörimisliike. Tämä poikkeama on käytetty erityis- ja yleisen suhteellisuusteorian ennustusten todistamiseen, ja se täytyy ottaa huomioon GPS-järjestelmien suunnittelussa. Kirjaimellisesti aika kulkee hitaammin GPS-satelliitissa.
+GPS-järjestelmiä on kehittänyt ja ottanut käyttöön useat maat ja poliittiset liitot, kuten Yhdysvallat, Venäjä, Japani, Intia, EU ja Kiina. Modernit GPS-anturit voivat yhdistyä useimpiin näistä järjestelmistä saadakseen nopeampia ja tarkempia paikannuksia.
+
+> 🎓 Kunkin järjestelmän satelliittiryhmiä kutsutaan tähdistöiksi.
+
+## Lue GPS-anturin dataa
+
+Useimmat GPS-anturit lähettävät GPS-dataa UARTin kautta.
+
+> ⚠️ UART käsiteltiin [projektissa 2, oppitunnilla 2](../../../2-farm/lessons/2-detect-soil-moisture/README.md#universal-asynchronous-receiver-transmitter-uart). Palaa tarvittaessa takaisin kyseiseen oppituntiin.
+
+Voit käyttää GPS-anturia IoT-laitteessasi GPS-datan lukemiseen.
+
+### Tehtävä - yhdistä GPS-anturi ja lue GPS-dataa
+
+Käy läpi sopiva opas GPS-datan lukemiseksi IoT-laitteellasi:
+
+* [Arduino - Wio Terminal](wio-terminal-gps-sensor.md)
+* [Yksikorttitietokone - Raspberry Pi](pi-gps-sensor.md)
+* [Yksikorttitietokone - Virtuaalilaite](virtual-device-gps-sensor.md)
+
+## NMEA GPS-data
+
+Kun suoritat koodisi, saatat nähdä tulosteessa jotain, mikä näyttää sekavalta. Tämä on itse asiassa standardoitua GPS-dataa, jolla on oma merkityksensä.
+
+GPS-anturit tuottavat dataa NMEA-viestien muodossa käyttäen NMEA 0183 -standardia. NMEA on lyhenne sanoista [National Marine Electronics Association](https://www.nmea.org), yhdysvaltalainen kauppajärjestö, joka asettaa standardeja merielektroniikan väliselle viestinnälle.
+
+> 💁 Tämä standardi on maksullinen ja sen hinta on vähintään 2 000 Yhdysvaltain dollaria, mutta julkisessa käytössä on riittävästi tietoa, jotta suurin osa standardista on voitu purkaa ja sitä voidaan käyttää avoimen lähdekoodin ja muussa ei-kaupallisessa koodissa.
+
+Nämä viestit ovat tekstipohjaisia. Jokainen viesti koostuu *lauseesta*, joka alkaa `$`-merkillä, jota seuraa kaksi merkkiä viestin lähteen osoittamiseksi (esim. GP Yhdysvaltain GPS-järjestelmälle, GN GLONASSille, Venäjän GPS-järjestelmälle) ja kolme merkkiä viestityypin osoittamiseksi. Viestin loppuosa koostuu pilkuilla erotetuista kentistä, jotka päättyvät rivinvaihtomerkkiin.
+
+Joidenkin vastaanotettavien viestityyppien kuvaukset:
+
+| Tyyppi | Kuvaus |
+| ------ | ------- |
+| GGA | GPS-paikannustiedot, mukaan lukien GPS-anturin leveysaste, pituusaste ja korkeus sekä näkyvien satelliittien määrä paikannuksen laskemiseksi. |
+| ZDA | Nykyinen päivämäärä ja kellonaika, mukaan lukien paikallinen aikavyöhyke |
+| GSV | Näkyvien satelliittien tiedot - määriteltynä satelliiteiksi, joista GPS-anturi voi vastaanottaa signaaleja |
+
+> 💁 GPS-data sisältää aikaleimat, joten IoT-laitteesi voi tarvittaessa saada ajan GPS-anturilta sen sijaan, että se luottaisi NTP-palvelimeen tai sisäiseen reaaliaikakelloon.
+
+GGA-viesti sisältää nykyisen sijainnin muodossa `(dd)dmm.mmmm`, sekä yhden merkin osoittamaan suuntaa. `d` muodossa tarkoittaa asteita, `m` minuutteja ja sekunnit ovat minuutin desimaaleina. Esimerkiksi 2°17'43" olisi 217.716666667 - 2 astetta, 17.716666667 minuuttia.
+
+Suuntaa osoittava merkki voi olla `N` tai `S` leveysasteelle osoittamaan pohjoista tai etelää, ja `E` tai `W` pituusasteelle osoittamaan itää tai länttä. Esimerkiksi leveysaste 2°17'43" olisi `N`, kun taas -2°17'43" olisi `S`.
+
+Esimerkki - NMEA-lause `$GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67`
+
+* Leveysasteosa on `4738.538654,N`, joka muunnetaan desimaaliasteiksi 47.6423109. `4738.538654` on 47.6423109, ja suunta on `N` (pohjoinen), joten se on positiivinen leveysaste.
+
+* Pituusasteosa on `12208.341758,W`, joka muunnetaan desimaaliasteiksi -122.1390293. `12208.341758` on 122.1390293°, ja suunta on `W` (länsi), joten se on negatiivinen pituusaste.
+
+## Dekoodaa GPS-anturin dataa
+
+Sen sijaan, että käyttäisit raakaa NMEA-dataa, on parempi dekoodata se hyödyllisempään muotoon. On olemassa useita avoimen lähdekoodin kirjastoja, jotka auttavat hyödyllisen datan poimimisessa raaoista NMEA-viesteistä.
+
+### Tehtävä - dekoodaa GPS-anturin dataa
+
+Käy läpi sopiva opas GPS-anturidatan dekoodaamiseksi IoT-laitteellasi:
+
+* [Arduino - Wio Terminal](wio-terminal-gps-decode.md)
+* [Yksikorttitietokone - Raspberry Pi/Virtuaalinen IoT-laite](single-board-computer-gps-decode.md)
+
+---
+
+## 🚀 Haaste
+
+Kirjoita oma NMEA-dekooderisi! Voitko kolmannen osapuolen kirjastojen sijaan kirjoittaa oman dekooderisi, joka poimii leveys- ja pituusasteet NMEA-lauseista?
+
+## Oppitunnin jälkeinen testi
+
+[Oppitunnin jälkeinen testi](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/22)
+
+## Kertaus ja itseopiskelu
+
+* Lue lisää maantieteellisistä koordinaateista [Wikipedia-sivulta maantieteellinen koordinaattijärjestelmä](https://wikipedia.org/wiki/Geographic_coordinate_system).
+* Tutustu muiden taivaankappaleiden nollameridiaaneihin [Wikipedia-sivulla nollameridiaani](https://wikipedia.org/wiki/Prime_meridian#Prime_meridian_on_other_planetary_bodies).
+* Tutki eri GPS-järjestelmiä, joita eri maailman hallitukset ja poliittiset liitot, kuten EU, Japani, Venäjä, Intia ja Yhdysvallat, ovat kehittäneet.
+
+## Tehtävä
+
+[Tutki muuta GPS-dataa](assignment.md)
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/3-transport/lessons/1-location-tracking/assignment.md b/translations/fi/3-transport/lessons/1-location-tracking/assignment.md
new file mode 100644
index 00000000..95af804d
--- /dev/null
+++ b/translations/fi/3-transport/lessons/1-location-tracking/assignment.md
@@ -0,0 +1,29 @@
+
+# Tutki muita GPS-tietoja
+
+## Ohjeet
+
+GPS-anturin lähettämät NMEA-lauseet sisältävät sijainnin lisäksi myös muita tietoja. Tutki näitä lisätietoja ja hyödynnä niitä IoT-laitteessasi.
+
+Esimerkiksi - voitko saada nykyisen päivämäärän ja kellonajan? Jos käytät mikrokontrolleria, voitko asettaa kellonajan GPS-datan avulla samalla tavalla kuin teit sen NTP-signaalien avulla edellisessä projektissa? Voitko saada korkeuden (korkeutesi merenpinnan yläpuolella) tai nykyisen nopeutesi?
+
+Jos käytät virtuaalista IoT-laitetta, voit saada osan näistä tiedoista lähettämällä NMEA-lauseita, jotka on luotu työkaluilla, kuten [nmeagen.org](https://www.nmeagen.org).
+
+## Arviointikriteerit
+
+| Kriteeri | Erinomainen | Riittävä | Parannettavaa |
+| -------- | ----------- | -------- | ------------- |
+| Hanki lisää GPS-tietoja | Osaa hankkia ja hyödyntää lisää GPS-tietoja joko telemetriassa tai IoT-laitteen asetuksissa | Osaa hankkia lisää GPS-tietoja, mutta ei osaa hyödyntää niitä | Ei osaa hankkia lisää GPS-tietoja |
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/3-transport/lessons/1-location-tracking/pi-gps-sensor.md b/translations/fi/3-transport/lessons/1-location-tracking/pi-gps-sensor.md
new file mode 100644
index 00000000..e60228e8
--- /dev/null
+++ b/translations/fi/3-transport/lessons/1-location-tracking/pi-gps-sensor.md
@@ -0,0 +1,193 @@
+
+# Lue GPS-data - Raspberry Pi
+
+Tässä osassa oppituntia lisäät GPS-anturin Raspberry Pi:hin ja luet sen antamia arvoja.
+
+## Laitteisto
+
+Raspberry Pi tarvitsee GPS-anturin.
+
+Käytettävä anturi on [Grove GPS Air530 -anturi](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html). Tämä anturi voi yhdistyä useisiin GPS-järjestelmiin nopean ja tarkan sijainnin määrittämiseksi. Anturi koostuu kahdesta osasta - anturin ydinelektroniikasta ja ulkoisesta antennista, joka on yhdistetty ohuella johdolla satelliittien radiotaajuuksien vastaanottamiseksi.
+
+Tämä on UART-anturi, joten se lähettää GPS-dataa UARTin kautta.
+
+## Yhdistä GPS-anturi
+
+Grove GPS -anturi voidaan yhdistää Raspberry Pi:hin.
+
+### Tehtävä - yhdistä GPS-anturi
+
+Yhdistä GPS-anturi.
+
+
+
+1. Työnnä Grove-kaapelin toinen pää GPS-anturin liittimeen. Se menee sisään vain yhdellä tavalla.
+
+1. Kun Raspberry Pi on sammutettu, yhdistä Grove-kaapelin toinen pää UART-liittimeen, joka on merkitty **UART** Grove Base -hatissa, joka on kiinnitetty Pi:hin. Tämä liitin sijaitsee keskimmäisellä rivillä, SD-korttipaikan puolella, USB-porttien ja Ethernet-liittimen vastakkaisella puolella.
+
+ 
+
+1. Aseta GPS-anturi niin, että siihen kiinnitetty antenni on näkyvissä taivaalle - mieluiten avoimen ikkunan vieressä tai ulkona. On helpompi saada selkeämpi signaali, kun antennin edessä ei ole esteitä.
+
+## Ohjelmoi GPS-anturi
+
+Raspberry Pi voidaan nyt ohjelmoida käyttämään liitettyä GPS-anturia.
+
+### Tehtävä - ohjelmoi GPS-anturi
+
+Ohjelmoi laite.
+
+1. Käynnistä Pi ja odota, että se käynnistyy.
+
+1. GPS-anturissa on kaksi LED-valoa - sininen LED, joka vilkkuu, kun dataa lähetetään, ja vihreä LED, joka vilkkuu sekunnin välein, kun satelliiteista vastaanotetaan dataa. Varmista, että sininen LED vilkkuu, kun käynnistät Pi:n. Muutaman minuutin kuluttua vihreä LED alkaa vilkkua - jos ei, sinun täytyy ehkä siirtää antennia.
+
+1. Käynnistä VS Code joko suoraan Pi:ssä tai yhdistä Remote SSH -laajennuksen kautta.
+
+ > ⚠️ Voit viitata [ohjeisiin VS Coden asennuksesta ja käynnistämisestä oppitunnilla 1 tarvittaessa](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md).
+
+1. Uudemmissa Raspberry Pi -malleissa, jotka tukevat Bluetoothia, on ristiriita Bluetoothin käyttämän sarjaportin ja Grove UART -portin käyttämän sarjaportin välillä. Korjaa tämä seuraavasti:
+
+ 1. VS Code -terminaalista muokkaa `/boot/config.txt` -tiedostoa käyttämällä `nano`-editoria seuraavalla komennolla:
+
+ ```sh
+ sudo nano /boot/config.txt
+ ```
+
+ > Tätä tiedostoa ei voi muokata VS Codessa, koska sinun täytyy käyttää `sudo`-oikeuksia, eli korotettuja käyttöoikeuksia. VS Code ei toimi näillä oikeuksilla.
+
+ 1. Käytä nuolinäppäimiä siirtyäksesi tiedoston loppuun ja kopioi alla oleva koodi tiedoston loppuun:
+
+ ```ini
+ dtoverlay=pi3-miniuart-bt
+ dtoverlay=pi3-disable-bt
+ enable_uart=1
+ ```
+
+ Voit liittää koodin käyttämällä laitteen normaaleja näppäinyhdistelmiä (`Ctrl+v` Windowsissa, Linuxissa tai Raspberry Pi OS:ssa, `Cmd+v` macOS:ssa).
+
+ 1. Tallenna tiedosto ja poistu nanosta painamalla `Ctrl+x`. Paina `y`, kun sinulta kysytään, haluatko tallentaa muutetun puskurin, ja paina sitten `enter` vahvistaaksesi, että haluat korvata `/boot/config.txt`.
+
+ > Jos teet virheen, voit poistua tallentamatta ja toistaa nämä vaiheet.
+
+ 1. Muokkaa `/boot/cmdline.txt` -tiedostoa nanossa seuraavalla komennolla:
+
+ ```sh
+ sudo nano /boot/cmdline.txt
+ ```
+
+ 1. Tämä tiedosto sisältää useita avain/arvo-pareja, jotka on erotettu välilyönneillä. Poista kaikki avain/arvo-parit, joiden avain on `console`. Ne näyttävät todennäköisesti tältä:
+
+ ```output
+ console=serial0,115200 console=tty1
+ ```
+
+ Voit siirtyä näihin merkintöihin nuolinäppäimillä ja poistaa ne käyttämällä normaaleja `del`- tai `backspace`-näppäimiä.
+
+ Esimerkiksi, jos alkuperäinen tiedosto näyttää tältä:
+
+ ```output
+ console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
+ ```
+
+ Uusi versio näyttää tältä:
+
+ ```output
+ root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
+ ```
+
+ 1. Noudata yllä olevia ohjeita tallentaaksesi tiedoston ja poistuaksesi nanosta.
+
+ 1. Käynnistä Pi uudelleen ja yhdistä VS Codeen, kun Pi on käynnistynyt.
+
+1. Luo terminaalista uusi kansio `pi`-käyttäjän kotihakemistoon nimeltä `gps-sensor`. Luo tiedosto tässä kansiossa nimeltä `app.py`.
+
+1. Avaa tämä kansio VS Codessa.
+
+1. GPS-moduuli lähettää UART-dataa sarjaportin kautta. Asenna `pyserial` Pip-paketti, jotta voit kommunikoida sarjaportin kanssa Python-koodistasi:
+
+ ```sh
+ pip3 install pyserial
+ ```
+
+1. Lisää seuraava koodi `app.py`-tiedostoosi:
+
+ ```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)
+ ```
+
+ Tämä koodi tuo `serial`-moduulin `pyserial` Pip-paketista. Se yhdistää `/dev/ttyAMA0`-sarjaporttiin - tämä on Grove Pi Base Hatin UART-portin osoite. Se tyhjentää kaikki olemassa olevat tiedot tästä sarjayhteydestä.
+
+ Seuraavaksi määritellään funktio nimeltä `print_gps_data`, joka tulostaa sille välitetyn rivin konsoliin.
+
+ Sitten koodi suorittaa ikuisen silmukan, jossa se lukee niin monta tekstiriviä kuin mahdollista sarjaportista jokaisessa silmukan kierrossa. Se kutsuu `print_gps_data`-funktiota jokaiselle riville.
+
+ Kun kaikki data on luettu, silmukka odottaa 1 sekunnin ja yrittää uudelleen.
+
+1. Suorita tämä koodi. Näet GPS-anturin raakadataa, joka näyttää suunnilleen tältä:
+
+ ```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
+ ```
+
+ > Jos saat seuraavat virheet, kun pysäytät ja käynnistät koodin uudelleen, lisää `try - except`-lohko while-silmukkaasi.
+
+ ```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)
+ ```
+
+> 💁 Löydät tämän koodin [code-gps/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps/pi) -kansiosta.
+
+😀 GPS-anturin ohjelmointi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md b/translations/fi/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md
new file mode 100644
index 00000000..e3afc0e7
--- /dev/null
+++ b/translations/fi/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md
@@ -0,0 +1,75 @@
+
+# Dekoodaa GPS-data - Virtuaalinen IoT-laitteisto ja Raspberry Pi
+
+Tässä oppitunnin osassa dekoodaat NMEA-viestit, jotka Raspberry Pi tai virtuaalinen IoT-laite lukee GPS-anturista, ja poimit niistä leveys- ja pituusasteet.
+
+## Dekoodaa GPS-data
+
+Kun raakadata NMEA-muodossa on luettu sarjaportista, se voidaan dekoodata avoimen lähdekoodin NMEA-kirjaston avulla.
+
+### Tehtävä - dekoodaa GPS-data
+
+Ohjelmoi laite dekoodaamaan GPS-data.
+
+1. Avaa `gps-sensor`-sovellusprojekti, jos se ei ole jo avoinna.
+
+1. Asenna `pynmea2`-Pip-paketti. Tämä paketti sisältää koodin NMEA-viestien dekoodaamiseen.
+
+ ```sh
+ pip3 install pynmea2
+ ```
+
+1. Lisää seuraava koodi `app.py`-tiedoston tuontiosioon tuodaksesi `pynmea2`-moduulin:
+
+ ```python
+ import pynmea2
+ ```
+
+1. Korvaa `print_gps_data`-funktion sisältö seuraavalla koodilla:
+
+ ```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')
+ ```
+
+ Tämä koodi käyttää `pynmea2`-kirjastoa jäsentämään UART-sarjaportista luetun rivin.
+
+ Jos viestin lauseen tyyppi on `GGA`, kyseessä on sijaintitietoviesti, ja se käsitellään. Viestistä luetaan leveys- ja pituusasteet, jotka muunnetaan desimaaliasteiksi NMEA-muodosta `(d)ddmm.mmmm`. `dm_to_sd`-funktio suorittaa tämän muunnoksen.
+
+ Tämän jälkeen tarkistetaan leveysasteen suunta, ja jos leveysaste on etelässä, arvo muunnetaan negatiiviseksi. Sama pätee pituusasteeseen: jos se on lännessä, se muunnetaan negatiiviseksi.
+
+ Lopuksi koordinaatit tulostetaan konsoliin yhdessä sijainnin määrittämiseen käytettyjen satelliittien lukumäärän kanssa.
+
+1. Suorita koodi. Jos käytät virtuaalista IoT-laitetta, varmista, että CounterFit-sovellus on käynnissä ja GPS-dataa lähetetään.
+
+ ```output
+ pi@raspberrypi:~/gps-sensor $ python3 app.py
+ 47.6423109,-122.1390293 - from 3 satellites
+ ```
+
+> 💁 Löydät tämän koodin [code-gps-decode/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/virtual-device)-kansiosta tai [code-gps-decode/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/pi)-kansiosta.
+
+😀 GPS-anturin ohjelmasi datan dekoodauksella onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md b/translations/fi/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md
new file mode 100644
index 00000000..62601daa
--- /dev/null
+++ b/translations/fi/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md
@@ -0,0 +1,144 @@
+
+# Lue GPS-dataa - Virtuaalinen IoT-laitteisto
+
+Tässä oppitunnin osassa lisäät GPS-anturin virtuaaliseen IoT-laitteeseesi ja luet siitä arvoja.
+
+## Virtuaalinen laitteisto
+
+Virtuaalinen IoT-laite käyttää simuloitua GPS-anturia, joka on saatavilla UARTin kautta sarjaportin avulla.
+
+Fyysisessä GPS-anturissa on antenni, joka vastaanottaa GPS-satelliittien radiotaajuuksia ja muuntaa GPS-signaalit GPS-dataksi. Virtuaalinen versio simuloi tätä antamalla sinun joko asettaa leveyspiirin ja pituuspiirin, lähettää raakoja NMEA-lauseita tai ladata GPX-tiedoston, jossa on useita sijainteja, jotka voidaan palauttaa peräkkäin.
+
+> 🎓 NMEA-lauseet käsitellään myöhemmin tässä oppitunnissa
+
+### Lisää anturi CounterFitiin
+
+Virtuaalisen GPS-anturin käyttämiseksi sinun täytyy lisätä sellainen CounterFit-sovellukseen.
+
+#### Tehtävä - lisää anturi CounterFitiin
+
+Lisää GPS-anturi CounterFit-sovellukseen.
+
+1. Luo tietokoneellesi uusi Python-sovellus kansioon nimeltä `gps-sensor`, jossa on yksi tiedosto nimeltä `app.py`, sekä Python-virtuaaliympäristö, ja lisää CounterFitin pip-paketit.
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin CounterFit Python -projektin luomisesta ja asettamisesta oppitunnissa 1](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md).
+
+1. Asenna lisä-Pip-paketti, joka sisältää CounterFit-shimin, joka voi kommunikoida UART-pohjaisten antureiden kanssa sarjayhteyden kautta. Varmista, että asennat tämän terminaalista, jossa virtuaaliympäristö on aktivoitu.
+
+ ```sh
+ pip install counterfit-shims-serial
+ ```
+
+1. Varmista, että CounterFit-verkkosovellus on käynnissä.
+
+1. Luo GPS-anturi:
+
+ 1. *Create sensor* -laatikossa *Sensors*-paneelissa avaa *Sensor type* -valikko ja valitse *UART GPS*.
+
+ 1. Jätä *Port*-asetukseksi */dev/ttyAMA0*.
+
+ 1. Valitse **Add**-painike luodaksesi GPS-anturin porttiin `/dev/ttyAMA0`.
+
+ 
+
+ GPS-anturi luodaan ja se näkyy anturilistassa.
+
+ 
+
+## Ohjelmoi GPS-anturi
+
+Virtuaalinen IoT-laite voidaan nyt ohjelmoida käyttämään virtuaalista GPS-anturia.
+
+### Tehtävä - ohjelmoi GPS-anturi
+
+Ohjelmoi GPS-anturisovellus.
+
+1. Varmista, että `gps-sensor`-sovellus on auki VS Codessa.
+
+1. Avaa `app.py`-tiedosto.
+
+1. Lisää seuraava koodi `app.py`-tiedoston alkuun yhdistääksesi sovelluksen CounterFitiin:
+
+ ```python
+ from counterfit_connection import CounterFitConnection
+ CounterFitConnection.init('127.0.0.1', 5000)
+ ```
+
+1. Lisää tämän alle seuraava koodi tuodaksesi tarvittavat kirjastot, mukaan lukien CounterFitin sarjaporttikirjasto:
+
+ ```python
+ import time
+ import counterfit_shims_serial
+
+ serial = counterfit_shims_serial.Serial('/dev/ttyAMA0')
+ ```
+
+ Tämä koodi tuo `serial`-moduulin `counterfit_shims_serial`-Pip-paketista. Se yhdistää `/dev/ttyAMA0`-sarjaporttiin, joka on virtuaalisen GPS-anturin UART-portin osoite.
+
+1. Lisää tämän alle seuraava koodi lukeaksesi sarjaportista ja tulostaaksesi arvot konsoliin:
+
+ ```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)
+ ```
+
+ Määritellään funktio nimeltä `print_gps_data`, joka tulostaa sille annetun rivin konsoliin.
+
+ Seuraavaksi koodi suorittaa ikuisen silmukan, jossa luetaan niin monta tekstiriviä kuin mahdollista sarjaportista jokaisella silmukan kierroksella. Se kutsuu `print_gps_data`-funktiota jokaiselle riville.
+
+ Kun kaikki data on luettu, silmukka odottaa 1 sekunnin ja yrittää uudelleen.
+
+1. Suorita tämä koodi varmistaen, että käytät eri terminaalia kuin sitä, jossa CounterFit-sovellus on käynnissä, jotta CounterFit-sovellus pysyy käynnissä.
+
+1. Muuta CounterFit-sovelluksessa GPS-anturin arvoja. Voit tehdä tämän jollakin seuraavista tavoista:
+
+ * Aseta **Source** arvoksi `Lat/Lon` ja määritä tarkka leveyspiiri, pituuspiiri ja satelliittien määrä, joita käytetään GPS-paikannukseen. Tämä arvo lähetetään vain kerran, joten valitse **Repeat**-ruutu, jotta data toistuu joka sekunti.
+
+ 
+
+ * Aseta **Source** arvoksi `NMEA` ja lisää NMEA-lauseita tekstikenttään. Kaikki nämä arvot lähetetään, ja uuden GGA (paikannus) -lauseen lukemisen välillä on 1 sekunnin viive.
+
+ 
+
+ Voit käyttää työkaluja, kuten [nmeagen.org](https://www.nmeagen.org), näiden lauseiden luomiseen piirtämällä kartalle. Nämä arvot lähetetään vain kerran, joten valitse **Repeat**-ruutu, jotta data toistuu sekunnin kuluttua siitä, kun kaikki on lähetetty.
+
+ * Aseta **Source** arvoksi GPX-tiedosto ja lataa GPX-tiedosto, jossa on reittisijainteja. Voit ladata GPX-tiedostoja useilta suosituilla kartta- ja retkeilysivustoilta, kuten [AllTrails](https://www.alltrails.com/). Nämä tiedostot sisältävät useita GPS-sijainteja reittinä, ja GPS-anturi palauttaa jokaisen uuden sijainnin 1 sekunnin välein.
+
+ 
+
+ Nämä arvot lähetetään vain kerran, joten valitse **Repeat**-ruutu, jotta data toistuu sekunnin kuluttua siitä, kun kaikki on lähetetty.
+
+ Kun olet määrittänyt GPS-asetukset, valitse **Set**-painike tallentaaksesi nämä arvot anturiin.
+
+1. Näet GPS-anturin raakadatan tulostettuna, esimerkiksi seuraavanlaisen:
+
+ ```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
+ ```
+
+> 💁 Löydät tämän koodin [code-gps/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps/virtual-device) -kansiosta.
+
+😀 GPS-anturisovelluksesi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md b/translations/fi/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md
new file mode 100644
index 00000000..0c16f0df
--- /dev/null
+++ b/translations/fi/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md
@@ -0,0 +1,83 @@
+
+# Purkaa GPS-data - Wio Terminal
+
+Tässä osassa oppituntia purat Wio Terminalin GPS-anturin lukemat NMEA-viestit ja poimit niistä leveys- ja pituusasteet.
+
+## Purkaa GPS-data
+
+Kun raaka NMEA-data on luettu sarjaportista, se voidaan purkaa avoimen lähdekoodin NMEA-kirjaston avulla.
+
+### Tehtävä - purkaa GPS-data
+
+Ohjelmoi laite purkamaan GPS-data.
+
+1. Avaa `gps-sensor`-sovellusprojekti, jos se ei ole jo auki.
+
+1. Lisää kirjastoriippuvuus [TinyGPSPlus](https://github.com/mikalhart/TinyGPSPlus)-kirjastolle projektin `platformio.ini`-tiedostoon. Tämä kirjasto sisältää koodin NMEA-datan purkamiseen.
+
+ ```ini
+ lib_deps =
+ mikalhart/TinyGPSPlus @ 1.0.2
+ ```
+
+1. Lisää `main.cpp`-tiedostoon include-direktiivi TinyGPSPlus-kirjastolle:
+
+ ```cpp
+ #include
+ ```
+
+1. Julista `Serial3`-määrittelyn alapuolella TinyGPSPlus-olio NMEA-lauseiden käsittelyä varten:
+
+ ```cpp
+ TinyGPSPlus gps;
+ ```
+
+1. Muuta `printGPSData`-funktion sisältö seuraavaksi:
+
+ ```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");
+ }
+ }
+ ```
+
+ Tämä koodi lukee seuraavan merkin UART-sarjaportista `gps`-NMEA-dekooderiin. Jokaisen merkin jälkeen se tarkistaa, onko dekooderi lukenut kelvollisen lauseen, ja sen jälkeen tarkistaa, onko se lukenut kelvollisen sijainnin. Jos sijainti on kelvollinen, se lähettää sen sarjamonitoriin yhdessä niiden satelliittien lukumäärän kanssa, jotka osallistuivat tähän paikannukseen.
+
+1. Käännä ja lataa koodi Wio Terminaliin.
+
+1. Kun koodi on ladattu, voit tarkkailla GPS-sijaintidataa sarjamonitorin avulla.
+
+ ```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
+ ```
+
+> 💁 Löydät tämän koodin [code-gps-decode/wio-terminal](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/wio-terminal)-kansiosta.
+
+😀 GPS-anturin ohjelmasi datan purkamisella onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md b/translations/fi/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md
new file mode 100644
index 00000000..e2d589f5
--- /dev/null
+++ b/translations/fi/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md
@@ -0,0 +1,154 @@
+
+# Lue GPS-data - Wio Terminal
+
+Tässä osassa oppituntia lisäät GPS-anturin Wio Terminal -laitteeseesi ja luet sen antamia arvoja.
+
+## Laitteisto
+
+Wio Terminal tarvitsee GPS-anturin.
+
+Käytettävä anturi on [Grove GPS Air530 -anturi](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html). Tämä anturi voi yhdistyä useisiin GPS-järjestelmiin nopeaa ja tarkkaa paikannusta varten. Anturi koostuu kahdesta osasta - anturin ydinelektroniikasta ja ohuella johdolla liitetystä ulkoisesta antennista, joka vastaanottaa satelliittien radiotaajuuksia.
+
+Tämä on UART-anturi, joten se lähettää GPS-dataa UARTin kautta.
+
+### Yhdistä GPS-anturi
+
+Grove GPS -anturi voidaan liittää Wio Terminal -laitteeseen.
+
+#### Tehtävä - yhdistä GPS-anturi
+
+Yhdistä GPS-anturi.
+
+
+
+1. Työnnä Grove-kaapelin toinen pää GPS-anturin liittimeen. Se menee sisään vain yhdellä tavalla.
+
+1. Kun Wio Terminal ei ole kytketty tietokoneeseen tai muuhun virtalähteeseen, liitä Grove-kaapelin toinen pää Wio Terminalin vasemmanpuoleiseen Grove-liittimeen, kun katsot näyttöä. Tämä liitin on lähimpänä virtapainiketta.
+
+ 
+
+1. Aseta GPS-anturi niin, että siihen liitetty antenni on näkyvissä taivaalle - mieluiten avoimen ikkunan vieressä tai ulkona. On helpompi saada selkeä signaali, kun antennin edessä ei ole esteitä.
+
+1. Nyt voit liittää Wio Terminalin tietokoneeseesi.
+
+1. GPS-anturissa on kaksi LED-valoa - sininen LED vilkkuu, kun dataa lähetetään, ja vihreä LED vilkkuu sekunnin välein, kun se vastaanottaa dataa satelliiteista. Varmista, että sininen LED vilkkuu, kun käynnistät Wio Terminalin. Muutaman minuutin kuluttua vihreän LEDin pitäisi alkaa vilkkua - jos ei, saatat joutua siirtämään antennia.
+
+## Ohjelmoi GPS-anturi
+
+Nyt Wio Terminal voidaan ohjelmoida käyttämään liitettyä GPS-anturia.
+
+### Tehtävä - ohjelmoi GPS-anturi
+
+Ohjelmoi laite.
+
+1. Luo uusi Wio Terminal -projekti käyttämällä PlatformIO:ta. Nimeä tämä projekti `gps-sensor`. Lisää koodi `setup`-funktioon sarjaportin konfiguroimiseksi.
+
+1. Lisää seuraava include-direktiivi `main.cpp`-tiedoston alkuun. Tämä sisältää otsikkotiedoston, jossa on funktioita vasemman Grove-portin konfiguroimiseksi UARTille.
+
+ ```cpp
+ #include
+ ```
+
+1. Tämän jälkeen lisää seuraava koodirivi määrittääksesi sarjaporttiyhteyden UART-porttiin:
+
+ ```cpp
+ static Uart Serial3(&sercom3, PIN_WIRE_SCL, PIN_WIRE_SDA, SERCOM_RX_PAD_1, UART_TX_PAD_0);
+ ```
+
+1. Sinun täytyy lisätä koodia ohjaamaan joitakin sisäisiä signaalinkäsittelijöitä tähän sarjaporttiin. Lisää seuraava koodi `Serial3`-määrittelyn alle:
+
+ ```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`-funktiossa, kohdassa, jossa `Serial`-portti konfiguroidaan, konfiguroi UART-sarjaportti seuraavalla koodilla:
+
+ ```cpp
+ Serial3.begin(9600);
+
+ while (!Serial3)
+ ; // Wait for Serial3 to be ready
+
+ delay(1000);
+ ```
+
+1. Tämän koodin alle `setup`-funktiossa lisää seuraava koodi yhdistääksesi Grove-pinnin sarjaporttiin:
+
+ ```cpp
+ pinPeripheral(PIN_WIRE_SCL, PIO_SERCOM_ALT);
+ ```
+
+1. Lisää seuraava funktio ennen `loop`-funktiota lähettääksesi GPS-dataa sarjamonitoriin:
+
+ ```cpp
+ void printGPSData()
+ {
+ Serial.println(Serial3.readStringUntil('\n'));
+ }
+ ```
+
+1. Lisää `loop`-funktioon seuraava koodi lukeaksesi UART-sarjaportista ja tulostaaksesi tulosteen sarjamonitoriin:
+
+ ```cpp
+ while (Serial3.available() > 0)
+ {
+ printGPSData();
+ }
+
+ delay(1000);
+ ```
+
+ Tämä koodi lukee UART-sarjaportista. `readStringUntil`-funktio lukee, kunnes se kohtaa lopetusmerkin, tässä tapauksessa rivinvaihdon. Tämä lukee kokonaisen NMEA-lauseen (NMEA-lauseet päättyvät rivinvaihtomerkkiin). Niin kauan kuin dataa voidaan lukea UART-sarjaportista, se luetaan ja lähetetään sarjamonitoriin `printGPSData`-funktion kautta. Kun dataa ei enää voida lukea, `loop` viivästyy yhden sekunnin (1 000 ms).
+
+1. Rakenna ja lataa koodi Wio Terminal -laitteeseen.
+
+1. Kun koodi on ladattu, voit tarkastella GPS-dataa sarjamonitorin avulla.
+
+ ```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
+ ```
+
+> 💁 Löydät tämän koodin [code-gps/wio-terminal](../../../../../3-transport/lessons/1-location-tracking/code-gps/wio-terminal) -kansiosta.
+
+😀 GPS-anturiohjelmasi onnistui!
+
+---
+
+**Vastuuvapauslauseke**:
+Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.
\ No newline at end of file
diff --git a/translations/fi/3-transport/lessons/2-store-location-data/README.md b/translations/fi/3-transport/lessons/2-store-location-data/README.md
new file mode 100644
index 00000000..a7ab04ac
--- /dev/null
+++ b/translations/fi/3-transport/lessons/2-store-location-data/README.md
@@ -0,0 +1,479 @@
+
+# Tallenna sijaintitiedot
+
+
+
+> Luonnoskuva: [Nitya Narasimhan](https://github.com/nitya). Klikkaa kuvaa nähdäksesi suuremman version.
+
+## Ennakkokysely
+
+[Ennakkokysely](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23)
+
+## Johdanto
+
+Edellisessä oppitunnissa opit käyttämään GPS-anturia sijaintitietojen tallentamiseen. Jotta näitä tietoja voidaan käyttää esimerkiksi ruokaa kuljettavan kuorma-auton sijainnin ja matkan visualisointiin, tiedot täytyy lähettää pilvessä toimivaan IoT-palveluun ja tallentaa jonnekin.
+
+Tässä oppitunnissa opit erilaisista tavoista tallentaa IoT-tietoja ja siitä, miten voit tallentaa tietoja IoT-palvelustasi palvelimettoman koodin avulla.
+
+Tässä oppitunnissa käsitellään:
+
+* [Strukturoitu ja strukturoimaton data](../../../../../3-transport/lessons/2-store-location-data)
+* [GPS-tietojen lähettäminen IoT Hubiin](../../../../../3-transport/lessons/2-store-location-data)
+* [Kuuma, lämmin ja kylmä polku](../../../../../3-transport/lessons/2-store-location-data)
+* [GPS-tapahtumien käsittely palvelimettomalla koodilla](../../../../../3-transport/lessons/2-store-location-data)
+* [Azure Storage -tilit](../../../../../3-transport/lessons/2-store-location-data)
+* [Yhdistä palvelimeton koodi tallennukseen](../../../../../3-transport/lessons/2-store-location-data)
+
+## Strukturoitu ja strukturoimaton data
+
+Tietokonejärjestelmät käsittelevät dataa, joka voi olla monenlaista ja eri muodoissa. Data voi vaihdella yksittäisistä numeroista suuriin tekstimääriin, videoihin, kuviin ja IoT-tietoihin. Data voidaan yleensä jakaa kahteen kategoriaan: *strukturoitu data* ja *strukturoimaton data*.
+
+* **Strukturoitu data** on hyvin määriteltyä ja jäykkärakenteista dataa, joka ei muutu ja joka yleensä vastaa taulukoita, joissa on suhteita. Esimerkki tästä on henkilön tiedot, kuten nimi, syntymäaika ja osoite.
+
+* **Strukturoimaton data** on dataa, jolla ei ole selkeää ja jäykkää rakennetta, ja joka voi muuttua usein. Esimerkki tästä on asiakirjat, kuten kirjoitetut dokumentit tai taulukot.
+
+✅ Tee tutkimusta: Voitko keksiä muita esimerkkejä strukturoituneesta ja strukturoimattomasta datasta?
+
+> 💁 On myös olemassa puolistrukturoitua dataa, joka on jossain määrin järjestettyä, mutta ei sovi kiinteisiin taulukoihin.
+
+IoT-data luokitellaan yleensä strukturoimattomaksi dataksi.
+
+Kuvittele, että lisäisit IoT-laitteita suuren kaupallisen maatilan ajoneuvokantaan. Saatat haluta käyttää erilaisia laitteita eri ajoneuvotyypeille. Esimerkiksi:
+
+* Maatalousajoneuvoille, kuten traktoreille, haluat GPS-tietoja varmistaaksesi, että ne työskentelevät oikeilla pelloilla.
+* Ruokaa varastoihin kuljettaville kuorma-autoille haluat GPS-tietojen lisäksi nopeus- ja kiihtyvyystietoja varmistaaksesi turvallisen ajon sekä kuljettajan tunnistustiedot ja käynnistys-/pysäytystiedot varmistaaksesi paikallisten työaikalakien noudattamisen.
+* Jäähdytetyille kuorma-autoille haluat myös lämpötilatietoja varmistaaksesi, ettei ruoka pilaannu liian kuuman tai kylmän lämpötilan vuoksi.
+
+Tämä data voi muuttua jatkuvasti. Esimerkiksi, jos IoT-laite on kuorma-auton ohjaamossa, sen lähettämät tiedot voivat muuttua perävaunun vaihtuessa, esimerkiksi lähettämällä lämpötilatietoja vain, kun käytössä on jäähdytetty perävaunu.
+
+✅ Mitä muuta IoT-dataa voisi kerätä? Mieti, millaisia kuormia kuorma-autot voivat kuljettaa, sekä huoltotietoja.
+
+Tämä data vaihtelee ajoneuvosta toiseen, mutta kaikki tiedot lähetetään samaan IoT-palveluun käsiteltäväksi. IoT-palvelun täytyy pystyä käsittelemään tätä strukturoimatonta dataa ja tallentamaan se tavalla, joka mahdollistaa sen hakemisen tai analysoinnin, mutta toimii eri rakenteiden kanssa.
+
+### SQL vs NoSQL -tallennus
+
+Tietokannat ovat palveluita, joiden avulla voit tallentaa ja hakea dataa. Tietokannat jaetaan kahteen tyyppiin: SQL ja NoSQL.
+
+#### SQL-tietokannat
+
+Ensimmäiset tietokannat olivat relaatiotietokantoja (RDBMS), joita kutsutaan myös SQL-tietokannoiksi niiden käyttämän Structured Query Language (SQL) -kielen mukaan. Näissä tietokannoissa on skeema – hyvin määritelty joukko taulukoita, jotka muistuttavat laskentataulukoita. Jokaisessa taulukossa on useita nimettyjä sarakkeita. Kun lisäät dataa, lisäät rivin taulukkoon ja täytät sarakkeet arvoilla. Tämä pitää datan hyvin jäykässä rakenteessa – vaikka voit jättää sarakkeita tyhjiksi, uuden sarakkeen lisääminen vaatii muutoksia tietokantaan ja olemassa olevien rivien arvojen täyttämistä. Nämä tietokannat ovat relaatiotietokantoja, eli yksi taulukko voi olla suhteessa toiseen.
+
+
+
+Esimerkiksi, jos tallennat käyttäjän henkilökohtaisia tietoja taulukkoon, sinulla olisi jokaiselle käyttäjälle sisäinen yksilöllinen ID, jota käytetään rivillä taulukossa, joka sisältää käyttäjän nimen ja osoitteen. Jos haluat tallentaa muita tietoja kyseisestä käyttäjästä, kuten hänen ostoksensa, toiseen taulukkoon, sinulla olisi yksi sarake uudessa taulukossa kyseisen käyttäjän ID:lle. Kun haet käyttäjää, voit käyttää hänen ID:tään saadaksesi hänen henkilökohtaiset tietonsa yhdestä taulukosta ja ostotiedot toisesta.
+
+SQL-tietokannat sopivat erinomaisesti strukturoituneen datan tallentamiseen ja tilanteisiin, joissa haluat varmistaa, että data vastaa skeemaasi.
+
+✅ Jos et ole käyttänyt SQL:ää aiemmin, lue siitä lisää [SQL:n Wikipedia-sivulta](https://wikipedia.org/wiki/SQL).
+
+Tunnettuja SQL-tietokantoja ovat Microsoft SQL Server, MySQL ja PostgreSQL.
+
+✅ Tee tutkimusta: Lue lisää näistä SQL-tietokannoista ja niiden ominaisuuksista.
+
+#### NoSQL-tietokannat
+
+NoSQL-tietokannat on nimetty näin, koska niillä ei ole SQL-tietokantojen jäykkää rakennetta. Niitä kutsutaan myös dokumenttitietokannoiksi, koska ne voivat tallentaa strukturoimatonta dataa, kuten dokumentteja.
+
+> 💁 Nimestään huolimatta jotkut NoSQL-tietokannat mahdollistavat SQL:n käytön datan hakemiseen.
+
+
+
+NoSQL-tietokannoilla ei ole ennalta määriteltyä skeemaa, joka rajoittaisi datan tallennustapaa. Sen sijaan voit lisätä mitä tahansa strukturoimatonta dataa, yleensä JSON-dokumentteina. Nämä dokumentit voidaan järjestää kansioihin, kuten tiedostot tietokoneellasi. Jokaisella dokumentilla voi olla eri kenttiä kuin toisilla dokumenteilla – esimerkiksi, jos tallennat IoT-dataa maatilan ajoneuvoista, joillakin dokumenteilla voi olla kiihtyvyys- ja nopeustietokenttiä, kun taas toisilla voi olla perävaunun lämpötilatietokenttiä. Jos lisäisit uuden kuorma-autotyypin, kuten sellaisen, jossa on sisäänrakennetut vaa'at kuorman painon seuraamiseen, IoT-laite voisi lisätä tämän uuden kentän, ja se voitaisiin tallentaa ilman muutoksia tietokantaan.
+
+Tunnettuja NoSQL-tietokantoja ovat Azure CosmosDB, MongoDB ja CouchDB.
+
+✅ Tee tutkimusta: Lue lisää näistä NoSQL-tietokannoista ja niiden ominaisuuksista.
+
+Tässä oppitunnissa käytät NoSQL-tallennusta IoT-datan tallentamiseen.
+
+## Lähetä GPS-tietoja IoT Hubiin
+
+Edellisessä oppitunnissa tallensit GPS-tietoja GPS-anturista, joka oli yhdistetty IoT-laitteeseesi. Jotta nämä IoT-tiedot voidaan tallentaa pilveen, ne täytyy lähettää IoT-palveluun. Käytät jälleen Azure IoT Hubia, samaa IoT-pilvipalvelua, jota käytit edellisessä projektissa.
+
+
+
+### Tehtävä – lähetä GPS-tietoja IoT Hubiin
+
+1. Luo uusi IoT Hub käyttämällä ilmaista tasoa.
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin IoT Hubin luomisesta projektin 2, oppitunnin 4 kohdassa](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud).
+
+ Muista luoda uusi resurssiryhmä. Nimeä uusi resurssiryhmä `gps-sensor` ja uusi IoT Hub yksilöllisellä nimellä, joka perustuu `gps-sensor`-nimeen, kuten `gps-sensor-`.
+
+ > 💁 Jos sinulla on vielä IoT Hub edellisestä projektista, voit käyttää sitä uudelleen. Muista käyttää tämän IoT Hubin nimeä ja sen resurssiryhmää, kun luot muita palveluita.
+
+1. Lisää uusi laite IoT Hubiin. Nimeä tämä laite `gps-sensor`. Ota laitteen yhteysmerkkijono talteen.
+
+1. Päivitä laitteesi koodi lähettämään GPS-tiedot uuteen IoT Hubiin käyttämällä edellisessä vaiheessa saatua laitteen yhteysmerkkijonoa.
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin laitteen yhdistämisestä IoT-palveluun projektin 2, oppitunnin 4 kohdassa](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service).
+
+1. Kun lähetät GPS-tietoja, tee se JSON-muodossa seuraavasti:
+
+ ```json
+ {
+ "gps" :
+ {
+ "lat" : ,
+ "lon" :
+ }
+ }
+ ```
+
+1. Lähetä GPS-tietoja minuutin välein, jotta et ylitä päivittäistä viestirajoitustasi.
+
+Jos käytät Wio Terminalia, muista lisätä kaikki tarvittavat kirjastot ja asettaa aika NTP-palvelimen avulla. Koodisi täytyy myös varmistaa, että se on lukenut kaikki tiedot sarjaportista ennen GPS-sijainnin lähettämistä, käyttämällä edellisen oppitunnin olemassa olevaa koodia. Käytä seuraavaa koodia JSON-dokumentin luomiseen:
+
+```cpp
+DynamicJsonDocument doc(1024);
+doc["gps"]["lat"] = gps.location.lat();
+doc["gps"]["lon"] = gps.location.lng();
+```
+
+Jos käytät virtuaalista IoT-laitetta, muista asentaa kaikki tarvittavat kirjastot virtuaaliympäristössä.
+
+Sekä Raspberry Pi:lle että virtuaaliselle IoT-laitteelle käytä edellisen oppitunnin olemassa olevaa koodia saadaksesi leveys- ja pituusastearvot, ja lähetä ne oikeassa JSON-muodossa seuraavalla koodilla:
+
+```python
+message_json = { "gps" : { "lat":lat, "lon":lon } }
+print("Sending telemetry", message_json)
+message = Message(json.dumps(message_json))
+```
+
+> 💁 Löydät tämän koodin kansioista [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) tai [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device).
+
+Aja laitteesi koodi ja varmista, että viestit virtaavat IoT Hubiin käyttämällä `az iot hub monitor-events` CLI-komentoa.
+
+## Kuuma, lämmin ja kylmä polku
+
+IoT-laitteesta pilveen virtaavaa dataa ei aina käsitellä reaaliajassa. Jotkin tiedot vaativat reaaliaikaista käsittelyä, toiset voidaan käsitellä hieman myöhemmin, ja jotkin tiedot voidaan käsitellä paljon myöhemmin. Datan virtausta eri palveluihin, jotka käsittelevät dataa eri aikoina, kutsutaan kuumaksi, lämpimäksi ja kylmäksi poluksi.
+
+### Kuuma polku
+
+Kuuma polku viittaa dataan, joka täytyy käsitellä reaaliajassa tai lähes reaaliajassa. Kuumaa polkua käytetään esimerkiksi hälytyksiin, kuten ilmoituksiin siitä, että ajoneuvo lähestyy varastoa, tai että jäähdytetyn kuorma-auton lämpötila on liian korkea.
+
+Kuumaa polkua varten koodisi vastaisi tapahtumiin heti, kun ne vastaanotetaan pilvipalveluissa.
+
+### Lämmin polku
+
+Lämmin polku viittaa dataan, joka voidaan käsitellä hieman myöhemmin, esimerkiksi raportointia tai lyhyen aikavälin analytiikkaa varten. Lämmin polku voisi sisältää esimerkiksi päivittäisiä raportteja ajoneuvojen ajokilometreistä, käyttäen edellisen päivän kerättyjä tietoja.
+
+Lämmin polku -data tallennetaan pilvipalveluun heti sen vastaanottamisen jälkeen, ja se on nopeasti saatavilla.
+
+### Kylmä polku
+
+Kylmä polku viittaa historialliseen dataan, joka tallennetaan pitkällä aikavälillä ja jota voidaan käsitellä tarvittaessa. Esimerkiksi kylmää polkua voitaisiin käyttää vuosittaisten ajokilometriraporttien luomiseen tai reittianalyysien tekemiseen polttoainekustannusten vähentämiseksi.
+
+Kylmä polku -data tallennetaan datavarastoihin – tietokantoihin, jotka on suunniteltu suurten, muuttumattomien tietomäärien tallentamiseen ja nopeaan hakemiseen. Pilvisovelluksessasi olisi yleensä säännöllinen tehtävä, joka siirtää dataa lämpimän polun tallennuksesta datavarastoon päivittäin, viikoittain tai kuukausittain.
+
+✅ Mieti tähän mennessä keräämääsi dataa näissä oppitunneissa. Onko se kuumaa, lämmintä vai kylmää polkua?
+
+## GPS-tapahtumien käsittely palvelimettomalla koodilla
+
+Kun data virtaa IoT Hubiin, voit kirjoittaa palvelimetonta koodia kuuntelemaan tapahtumia, jotka julkaistaan Event-Hub-yhteensopivaan päätepisteeseen. Tämä on lämmin polku – tämä data tallennetaan ja sitä käytetään seuraavassa oppitunnissa matkan raportointiin.
+
+
+
+### Tehtävä – käsittele GPS-tapahtumia palvelimettomalla koodilla
+
+1. Luo Azure Functions -sovellus käyttämällä Azure Functions CLI:ta. Käytä Python-ajoympäristöä ja luo se kansioon nimeltä `gps-trigger`, ja käytä samaa nimeä Functions App -projektin nimenä. Varmista, että luot virtuaaliympäristön tätä varten.
+> ⚠️ Voit tarvittaessa viitata [ohjeisiin Azure Functions -projektin luomisesta projektista 2, oppitunti 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application).
+1. Lisää IoT Hub -tapahtumatriggeri, joka käyttää IoT Hubin Event Hub -yhteensopivaa päätepistettä.
+
+ > ⚠️ Voit tarvittaessa viitata [ohjeisiin IoT Hub -tapahtumatriggerin luomisesta projektin 2, oppitunnin 5 kohdasta](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger).
+
+1. Aseta Event Hub -yhteensopivan päätepisteen yhteysmerkkijono `local.settings.json`-tiedostoon ja käytä sen merkintää `function.json`-tiedostossa.
+
+1. Käytä Azurite-sovellusta paikallisena tallennusemulaattorina.
+
+1. Suorita Functions-sovelluksesi varmistaaksesi, että se vastaanottaa tapahtumia GPS-laitteeltasi. Varmista, että IoT-laitteesi on myös käynnissä ja lähettää GPS-dataa.
+
+ ```output
+ Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}}
+ ```
+
+## Azure Storage -tilit
+
+
+
+Azure Storage -tilit ovat yleiskäyttöinen tallennuspalvelu, joka voi tallentaa dataa monin eri tavoin. Voit tallentaa dataa blobina, jonoissa, taulukoissa tai tiedostoina, ja kaikki nämä samanaikaisesti.
+
+### Blob-tallennus
+
+Sana *Blob* tarkoittaa suuria binääriobjekteja, mutta siitä on tullut yleinen termi rakenteettomalle datalle. Voit tallentaa mitä tahansa dataa blob-tallennukseen, kuten IoT-datan sisältäviä JSON-dokumentteja, kuvia ja elokuvatiedostoja. Blob-tallennuksessa on *säiliöiden* käsite, nimettyjä "ämpäreitä", joihin dataa voidaan tallentaa, vastaavasti kuin relaatiotietokannan taulukoihin. Nämä säiliöt voivat sisältää yhden tai useamman kansion blobien tallentamiseen, ja jokainen kansio voi sisältää muita kansioita, kuten tiedostot tietokoneesi kiintolevyllä.
+
+Tässä oppitunnissa käytät blob-tallennusta IoT-datan tallentamiseen.
+
+✅ Tee tutkimusta: Lue lisää [Azure Blob Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn)
+
+### Taulukkotallennus
+
+Taulukkotallennus mahdollistaa puolirakenteisen datan tallentamisen. Taulukkotallennus on itse asiassa NoSQL-tietokanta, joten se ei vaadi ennalta määriteltyä taulukkosarjaa, mutta se on suunniteltu tallentamaan dataa yhteen tai useampaan taulukkoon, joissa jokaisella rivillä on yksilölliset avaimet.
+
+✅ Tee tutkimusta: Lue lisää [Azure Table Storage](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn)
+
+### Jonotallennus
+
+Jonotallennus mahdollistaa enintään 64KB:n kokoisten viestien tallentamisen jonoon. Voit lisätä viestejä jonon loppuun ja lukea niitä jonon alusta. Jonot tallentavat viestejä määräämättömän ajan, kunhan tallennustilaa on jäljellä, joten viestit voidaan tallentaa pitkäaikaisesti ja lukea tarvittaessa. Esimerkiksi, jos haluat suorittaa kuukausittaisen työn GPS-datan käsittelemiseksi, voit lisätä dataa jonoon joka päivä kuukauden ajan ja käsitellä kaikki viestit kuukauden lopussa.
+
+✅ Tee tutkimusta: Lue lisää [Azure Queue Storage](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn)
+
+### Tiedostotallennus
+
+Tiedostotallennus tarkoittaa tiedostojen tallentamista pilveen, ja kaikki sovellukset tai laitteet voivat muodostaa yhteyden käyttämällä alan standardiprotokollia. Voit kirjoittaa tiedostoja tiedostotallennukseen ja liittää sen asemaksi tietokoneellesi.
+
+✅ Tee tutkimusta: Lue lisää [Azure File Storage](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn)
+
+## Yhdistä palvelukoodisi tallennukseen
+
+Functions-sovelluksesi täytyy nyt yhdistää blob-tallennukseen IoT Hubin viestien tallentamiseksi. Tämä voidaan tehdä kahdella tavalla:
+
+* Functions-koodin sisällä, yhdistä blob-tallennukseen käyttämällä blob-tallennuksen Python SDK:ta ja kirjoita data blobina.
+* Käytä ulostulon funktiokytkentää sitomaan funktion palautusarvo blob-tallennukseen ja tallenna blob automaattisesti.
+
+Tässä oppitunnissa käytät Python SDK:ta nähdäksesi, miten blob-tallennusta käytetään.
+
+
+
+Data tallennetaan JSON-blobina seuraavassa muodossa:
+
+```json
+{
+ "device_id": ,
+ "timestamp" :