diff --git a/.cache/plugin/social/015cc20937efa03fb2e34c1f13e454dc.png b/.cache/plugin/social/015cc20937efa03fb2e34c1f13e454dc.png new file mode 100644 index 000000000..3215e1bf1 Binary files /dev/null and b/.cache/plugin/social/015cc20937efa03fb2e34c1f13e454dc.png differ diff --git a/.cache/plugin/social/0820b93b402fb53c5eb3a50ef0c61fdd.png b/.cache/plugin/social/0820b93b402fb53c5eb3a50ef0c61fdd.png new file mode 100644 index 000000000..007ce7669 Binary files /dev/null and b/.cache/plugin/social/0820b93b402fb53c5eb3a50ef0c61fdd.png differ diff --git a/.cache/plugin/social/0b7283822e6a457e30868a5b6029d667.png b/.cache/plugin/social/0b7283822e6a457e30868a5b6029d667.png new file mode 100644 index 000000000..067202762 Binary files /dev/null and b/.cache/plugin/social/0b7283822e6a457e30868a5b6029d667.png differ diff --git a/.cache/plugin/social/0beab53dbeed909d5b038fe5a8e95969.png b/.cache/plugin/social/0beab53dbeed909d5b038fe5a8e95969.png new file mode 100644 index 000000000..893ada07b Binary files /dev/null and b/.cache/plugin/social/0beab53dbeed909d5b038fe5a8e95969.png differ diff --git a/.cache/plugin/social/115b8dfaa21384aeda890fa6963d93f8.png b/.cache/plugin/social/115b8dfaa21384aeda890fa6963d93f8.png new file mode 100644 index 000000000..c8e74639d Binary files /dev/null and b/.cache/plugin/social/115b8dfaa21384aeda890fa6963d93f8.png differ diff --git a/.cache/plugin/social/1363157cfcc771c5b2c536e6d3398270.png b/.cache/plugin/social/1363157cfcc771c5b2c536e6d3398270.png new file mode 100644 index 000000000..144754b63 Binary files /dev/null and b/.cache/plugin/social/1363157cfcc771c5b2c536e6d3398270.png differ diff --git a/.cache/plugin/social/142cd952984be66e95540dabeb86cf26.png b/.cache/plugin/social/142cd952984be66e95540dabeb86cf26.png new file mode 100644 index 000000000..cd8b63a16 Binary files /dev/null and b/.cache/plugin/social/142cd952984be66e95540dabeb86cf26.png differ diff --git a/.cache/plugin/social/168939787655ce1f9625dd0f528363c8.png b/.cache/plugin/social/168939787655ce1f9625dd0f528363c8.png new file mode 100644 index 000000000..93f649f95 Binary files /dev/null and b/.cache/plugin/social/168939787655ce1f9625dd0f528363c8.png differ diff --git a/.cache/plugin/social/17ad837aabe8635b2e0661016af9a575.png b/.cache/plugin/social/17ad837aabe8635b2e0661016af9a575.png new file mode 100644 index 000000000..6cb6a4e88 Binary files /dev/null and b/.cache/plugin/social/17ad837aabe8635b2e0661016af9a575.png differ diff --git a/.cache/plugin/social/1966f3e168a83c27b2617c8da06cc613.png b/.cache/plugin/social/1966f3e168a83c27b2617c8da06cc613.png new file mode 100644 index 000000000..a7581d4ec Binary files /dev/null and b/.cache/plugin/social/1966f3e168a83c27b2617c8da06cc613.png differ diff --git a/.cache/plugin/social/1d279d3f6d2d584634c77fdb3372b9c7.png b/.cache/plugin/social/1d279d3f6d2d584634c77fdb3372b9c7.png new file mode 100644 index 000000000..4b6ec457f Binary files /dev/null and b/.cache/plugin/social/1d279d3f6d2d584634c77fdb3372b9c7.png differ diff --git a/.cache/plugin/social/1dc6ecfb309291967496bb2e43fb7ce3.png b/.cache/plugin/social/1dc6ecfb309291967496bb2e43fb7ce3.png new file mode 100644 index 000000000..31c0a894a Binary files /dev/null and b/.cache/plugin/social/1dc6ecfb309291967496bb2e43fb7ce3.png differ diff --git a/.cache/plugin/social/22ed1f348e956d4c9675cd6d50bfaa66.png b/.cache/plugin/social/22ed1f348e956d4c9675cd6d50bfaa66.png new file mode 100644 index 000000000..56db74d87 Binary files /dev/null and b/.cache/plugin/social/22ed1f348e956d4c9675cd6d50bfaa66.png differ diff --git a/.cache/plugin/social/2385babc9e1027a704d159d5eb0c12f6.png b/.cache/plugin/social/2385babc9e1027a704d159d5eb0c12f6.png new file mode 100644 index 000000000..9f48905e0 Binary files /dev/null and b/.cache/plugin/social/2385babc9e1027a704d159d5eb0c12f6.png differ diff --git a/.cache/plugin/social/276f5ffb06a4dac60638bfc9cf771a6e.png b/.cache/plugin/social/276f5ffb06a4dac60638bfc9cf771a6e.png new file mode 100644 index 000000000..91ef711ce Binary files /dev/null and b/.cache/plugin/social/276f5ffb06a4dac60638bfc9cf771a6e.png differ diff --git a/.cache/plugin/social/35c8399d2d6700e661a3f97641521ee7.png b/.cache/plugin/social/35c8399d2d6700e661a3f97641521ee7.png new file mode 100644 index 000000000..1fe8e834b Binary files /dev/null and b/.cache/plugin/social/35c8399d2d6700e661a3f97641521ee7.png differ diff --git a/.cache/plugin/social/39467216805f59ee82e068bf93546d5a.png b/.cache/plugin/social/39467216805f59ee82e068bf93546d5a.png new file mode 100644 index 000000000..e0f4ffcaf Binary files /dev/null and b/.cache/plugin/social/39467216805f59ee82e068bf93546d5a.png differ diff --git a/.cache/plugin/social/3aeb4292c26b74e35f4a9d81e0fc5307.png b/.cache/plugin/social/3aeb4292c26b74e35f4a9d81e0fc5307.png new file mode 100644 index 000000000..efdf12037 Binary files /dev/null and b/.cache/plugin/social/3aeb4292c26b74e35f4a9d81e0fc5307.png differ diff --git a/.cache/plugin/social/3c0c2089ed5f4771dc387518346edc82.png b/.cache/plugin/social/3c0c2089ed5f4771dc387518346edc82.png new file mode 100644 index 000000000..153099899 Binary files /dev/null and b/.cache/plugin/social/3c0c2089ed5f4771dc387518346edc82.png differ diff --git a/.cache/plugin/social/42dad2edb4b16dac39939296f565cd98.png b/.cache/plugin/social/42dad2edb4b16dac39939296f565cd98.png new file mode 100644 index 000000000..cda85fccb Binary files /dev/null and b/.cache/plugin/social/42dad2edb4b16dac39939296f565cd98.png differ diff --git a/.cache/plugin/social/4524deea24c561fa81efb787422ac34b.png b/.cache/plugin/social/4524deea24c561fa81efb787422ac34b.png new file mode 100644 index 000000000..b3ed5517e Binary files /dev/null and b/.cache/plugin/social/4524deea24c561fa81efb787422ac34b.png differ diff --git a/.cache/plugin/social/4aab61d0736da8f1e0453e27575eafda.png b/.cache/plugin/social/4aab61d0736da8f1e0453e27575eafda.png new file mode 100644 index 000000000..1baa6ffc2 Binary files /dev/null and b/.cache/plugin/social/4aab61d0736da8f1e0453e27575eafda.png differ diff --git a/.cache/plugin/social/4d9cc9ecdb3b709d8ffeab2cbfe28f81.png b/.cache/plugin/social/4d9cc9ecdb3b709d8ffeab2cbfe28f81.png new file mode 100644 index 000000000..8dc9daec1 Binary files /dev/null and b/.cache/plugin/social/4d9cc9ecdb3b709d8ffeab2cbfe28f81.png differ diff --git a/.cache/plugin/social/4da75f112f8e6506d50a0426cbf3f72d.png b/.cache/plugin/social/4da75f112f8e6506d50a0426cbf3f72d.png new file mode 100644 index 000000000..1b157f384 Binary files /dev/null and b/.cache/plugin/social/4da75f112f8e6506d50a0426cbf3f72d.png differ diff --git a/.cache/plugin/social/4ddbc1521c50763248935f2f5c617f6c.png b/.cache/plugin/social/4ddbc1521c50763248935f2f5c617f6c.png new file mode 100644 index 000000000..b6216886e Binary files /dev/null and b/.cache/plugin/social/4ddbc1521c50763248935f2f5c617f6c.png differ diff --git a/.cache/plugin/social/4e2b8161deda580d553462e68598fd97.png b/.cache/plugin/social/4e2b8161deda580d553462e68598fd97.png new file mode 100644 index 000000000..ba5da0484 Binary files /dev/null and b/.cache/plugin/social/4e2b8161deda580d553462e68598fd97.png differ diff --git a/.cache/plugin/social/512a3e49e4b27a7f3e20e42600531448.png b/.cache/plugin/social/512a3e49e4b27a7f3e20e42600531448.png new file mode 100644 index 000000000..0e400570c Binary files /dev/null and b/.cache/plugin/social/512a3e49e4b27a7f3e20e42600531448.png differ diff --git a/.cache/plugin/social/52038f8aacde4e3dfbcd621df78919b6.png b/.cache/plugin/social/52038f8aacde4e3dfbcd621df78919b6.png new file mode 100644 index 000000000..1053741ad Binary files /dev/null and b/.cache/plugin/social/52038f8aacde4e3dfbcd621df78919b6.png differ diff --git a/.cache/plugin/social/532bc43b26eae8f3177c07ec611c5b61.png b/.cache/plugin/social/532bc43b26eae8f3177c07ec611c5b61.png new file mode 100644 index 000000000..89cae8348 Binary files /dev/null and b/.cache/plugin/social/532bc43b26eae8f3177c07ec611c5b61.png differ diff --git a/.cache/plugin/social/5a079492df860ee71767d63911dd0b0e.png b/.cache/plugin/social/5a079492df860ee71767d63911dd0b0e.png new file mode 100644 index 000000000..3fcad1117 Binary files /dev/null and b/.cache/plugin/social/5a079492df860ee71767d63911dd0b0e.png differ diff --git a/.cache/plugin/social/64112ba90df96bbe9c0242ad64e71df5.png b/.cache/plugin/social/64112ba90df96bbe9c0242ad64e71df5.png new file mode 100644 index 000000000..395de8e05 Binary files /dev/null and b/.cache/plugin/social/64112ba90df96bbe9c0242ad64e71df5.png differ diff --git a/.cache/plugin/social/6bc9d9775fa73796aa4ec1921aba1c70.png b/.cache/plugin/social/6bc9d9775fa73796aa4ec1921aba1c70.png new file mode 100644 index 000000000..e4ff3567f Binary files /dev/null and b/.cache/plugin/social/6bc9d9775fa73796aa4ec1921aba1c70.png differ diff --git a/.cache/plugin/social/6d604106d56a25714fb8caf45fb130a6.png b/.cache/plugin/social/6d604106d56a25714fb8caf45fb130a6.png new file mode 100644 index 000000000..ba46d4147 Binary files /dev/null and b/.cache/plugin/social/6d604106d56a25714fb8caf45fb130a6.png differ diff --git a/.cache/plugin/social/7207549f6fa34bb178d8ed9605f2c054.png b/.cache/plugin/social/7207549f6fa34bb178d8ed9605f2c054.png new file mode 100644 index 000000000..7bdb2422f Binary files /dev/null and b/.cache/plugin/social/7207549f6fa34bb178d8ed9605f2c054.png differ diff --git a/.cache/plugin/social/72e1f36ce75be1dd1d91b1f0cb41162a.png b/.cache/plugin/social/72e1f36ce75be1dd1d91b1f0cb41162a.png new file mode 100644 index 000000000..dd5f9e83b Binary files /dev/null and b/.cache/plugin/social/72e1f36ce75be1dd1d91b1f0cb41162a.png differ diff --git a/.cache/plugin/social/7397f0e34191fa94f797eb992fd20ea2.png b/.cache/plugin/social/7397f0e34191fa94f797eb992fd20ea2.png new file mode 100644 index 000000000..d78577e6a Binary files /dev/null and b/.cache/plugin/social/7397f0e34191fa94f797eb992fd20ea2.png differ diff --git a/.cache/plugin/social/7624168e10a0130dd938905e01cfb32a.png b/.cache/plugin/social/7624168e10a0130dd938905e01cfb32a.png new file mode 100644 index 000000000..569ac381d Binary files /dev/null and b/.cache/plugin/social/7624168e10a0130dd938905e01cfb32a.png differ diff --git a/.cache/plugin/social/7676194bb7dea60c36905d0002491424.png b/.cache/plugin/social/7676194bb7dea60c36905d0002491424.png new file mode 100644 index 000000000..e18e8f2a3 Binary files /dev/null and b/.cache/plugin/social/7676194bb7dea60c36905d0002491424.png differ diff --git a/.cache/plugin/social/7a9afa67fc02071e841e72ea93e0f85b.png b/.cache/plugin/social/7a9afa67fc02071e841e72ea93e0f85b.png new file mode 100644 index 000000000..3e90c108d Binary files /dev/null and b/.cache/plugin/social/7a9afa67fc02071e841e72ea93e0f85b.png differ diff --git a/.cache/plugin/social/7ac9eb19035e12752d54e7efb69172ed.png b/.cache/plugin/social/7ac9eb19035e12752d54e7efb69172ed.png new file mode 100644 index 000000000..ac31fa272 Binary files /dev/null and b/.cache/plugin/social/7ac9eb19035e12752d54e7efb69172ed.png differ diff --git a/.cache/plugin/social/808e4bccaa4de7c63749c7e080b49a77.png b/.cache/plugin/social/808e4bccaa4de7c63749c7e080b49a77.png new file mode 100644 index 000000000..2c9c4c783 Binary files /dev/null and b/.cache/plugin/social/808e4bccaa4de7c63749c7e080b49a77.png differ diff --git a/.cache/plugin/social/83aa32230ff7eb0b5aba73d0bd7c163d.png b/.cache/plugin/social/83aa32230ff7eb0b5aba73d0bd7c163d.png new file mode 100644 index 000000000..d125e5227 Binary files /dev/null and b/.cache/plugin/social/83aa32230ff7eb0b5aba73d0bd7c163d.png differ diff --git a/.cache/plugin/social/83bb2e37612aa0f9f638c3feaf1931c8.png b/.cache/plugin/social/83bb2e37612aa0f9f638c3feaf1931c8.png new file mode 100644 index 000000000..352062bc3 Binary files /dev/null and b/.cache/plugin/social/83bb2e37612aa0f9f638c3feaf1931c8.png differ diff --git a/.cache/plugin/social/87e1b631174a4585bc21ffa660a84fb7.png b/.cache/plugin/social/87e1b631174a4585bc21ffa660a84fb7.png new file mode 100644 index 000000000..70ad26d67 Binary files /dev/null and b/.cache/plugin/social/87e1b631174a4585bc21ffa660a84fb7.png differ diff --git a/.cache/plugin/social/8ba76be53306acc47c5d00949288628f.png b/.cache/plugin/social/8ba76be53306acc47c5d00949288628f.png new file mode 100644 index 000000000..cf838f371 Binary files /dev/null and b/.cache/plugin/social/8ba76be53306acc47c5d00949288628f.png differ diff --git a/.cache/plugin/social/8fb06646012c6561bc560218348f1e51.png b/.cache/plugin/social/8fb06646012c6561bc560218348f1e51.png new file mode 100644 index 000000000..5fff4d95a Binary files /dev/null and b/.cache/plugin/social/8fb06646012c6561bc560218348f1e51.png differ diff --git a/.cache/plugin/social/91436771df3a10329e965a921bcf88c9.png b/.cache/plugin/social/91436771df3a10329e965a921bcf88c9.png new file mode 100644 index 000000000..a4905584d Binary files /dev/null and b/.cache/plugin/social/91436771df3a10329e965a921bcf88c9.png differ diff --git a/.cache/plugin/social/95889a6b8c44ac246635f5221804f353.png b/.cache/plugin/social/95889a6b8c44ac246635f5221804f353.png new file mode 100644 index 000000000..a70e1549e Binary files /dev/null and b/.cache/plugin/social/95889a6b8c44ac246635f5221804f353.png differ diff --git a/.cache/plugin/social/96bb55c57f9f52292616284609ae94f4.png b/.cache/plugin/social/96bb55c57f9f52292616284609ae94f4.png new file mode 100644 index 000000000..3d41ed228 Binary files /dev/null and b/.cache/plugin/social/96bb55c57f9f52292616284609ae94f4.png differ diff --git a/.cache/plugin/social/97982c1f8a6dffc5538a9757cc1c2983.png b/.cache/plugin/social/97982c1f8a6dffc5538a9757cc1c2983.png new file mode 100644 index 000000000..53d46fc50 Binary files /dev/null and b/.cache/plugin/social/97982c1f8a6dffc5538a9757cc1c2983.png differ diff --git a/.cache/plugin/social/9b65118fe076aa233778f0951740fa83.png b/.cache/plugin/social/9b65118fe076aa233778f0951740fa83.png new file mode 100644 index 000000000..caf8c952a Binary files /dev/null and b/.cache/plugin/social/9b65118fe076aa233778f0951740fa83.png differ diff --git a/.cache/plugin/social/9ed52a4fc75e9597bec6496aee0072c3.png b/.cache/plugin/social/9ed52a4fc75e9597bec6496aee0072c3.png new file mode 100644 index 000000000..1c30af1b2 Binary files /dev/null and b/.cache/plugin/social/9ed52a4fc75e9597bec6496aee0072c3.png differ diff --git a/.cache/plugin/social/9ef179ca0255fe48d94240793efbb203.png b/.cache/plugin/social/9ef179ca0255fe48d94240793efbb203.png new file mode 100644 index 000000000..fc5f6b15c Binary files /dev/null and b/.cache/plugin/social/9ef179ca0255fe48d94240793efbb203.png differ diff --git a/.cache/plugin/social/Roboto-Black.ttf b/.cache/plugin/social/Roboto-Black.ttf new file mode 100644 index 000000000..0112e7da6 Binary files /dev/null and b/.cache/plugin/social/Roboto-Black.ttf differ diff --git a/.cache/plugin/social/Roboto-BlackItalic.ttf b/.cache/plugin/social/Roboto-BlackItalic.ttf new file mode 100644 index 000000000..b2c6aca57 Binary files /dev/null and b/.cache/plugin/social/Roboto-BlackItalic.ttf differ diff --git a/.cache/plugin/social/Roboto-Bold.ttf b/.cache/plugin/social/Roboto-Bold.ttf new file mode 100644 index 000000000..43da14d84 Binary files /dev/null and b/.cache/plugin/social/Roboto-Bold.ttf differ diff --git a/.cache/plugin/social/Roboto-BoldItalic.ttf b/.cache/plugin/social/Roboto-BoldItalic.ttf new file mode 100644 index 000000000..bcfdab431 Binary files /dev/null and b/.cache/plugin/social/Roboto-BoldItalic.ttf differ diff --git a/.cache/plugin/social/Roboto-Italic.ttf b/.cache/plugin/social/Roboto-Italic.ttf new file mode 100644 index 000000000..1b5eaa361 Binary files /dev/null and b/.cache/plugin/social/Roboto-Italic.ttf differ diff --git a/.cache/plugin/social/Roboto-Light.ttf b/.cache/plugin/social/Roboto-Light.ttf new file mode 100644 index 000000000..e7307e72c Binary files /dev/null and b/.cache/plugin/social/Roboto-Light.ttf differ diff --git a/.cache/plugin/social/Roboto-LightItalic.ttf b/.cache/plugin/social/Roboto-LightItalic.ttf new file mode 100644 index 000000000..2d277afb2 Binary files /dev/null and b/.cache/plugin/social/Roboto-LightItalic.ttf differ diff --git a/.cache/plugin/social/Roboto-Medium.ttf b/.cache/plugin/social/Roboto-Medium.ttf new file mode 100644 index 000000000..ac0f908b9 Binary files /dev/null and b/.cache/plugin/social/Roboto-Medium.ttf differ diff --git a/.cache/plugin/social/Roboto-MediumItalic.ttf b/.cache/plugin/social/Roboto-MediumItalic.ttf new file mode 100644 index 000000000..fc36a4785 Binary files /dev/null and b/.cache/plugin/social/Roboto-MediumItalic.ttf differ diff --git a/.cache/plugin/social/Roboto-Regular.ttf b/.cache/plugin/social/Roboto-Regular.ttf new file mode 100644 index 000000000..ddf4bfacb Binary files /dev/null and b/.cache/plugin/social/Roboto-Regular.ttf differ diff --git a/.cache/plugin/social/Roboto-Thin.ttf b/.cache/plugin/social/Roboto-Thin.ttf new file mode 100644 index 000000000..2e0dee6a8 Binary files /dev/null and b/.cache/plugin/social/Roboto-Thin.ttf differ diff --git a/.cache/plugin/social/Roboto-ThinItalic.ttf b/.cache/plugin/social/Roboto-ThinItalic.ttf new file mode 100644 index 000000000..084f9c0f5 Binary files /dev/null and b/.cache/plugin/social/Roboto-ThinItalic.ttf differ diff --git a/.cache/plugin/social/b2a3fd36b674125ccc248e28208f921f.png b/.cache/plugin/social/b2a3fd36b674125ccc248e28208f921f.png new file mode 100644 index 000000000..f8b4739ce Binary files /dev/null and b/.cache/plugin/social/b2a3fd36b674125ccc248e28208f921f.png differ diff --git a/.cache/plugin/social/b2c932034761473e5c3ca85ba2c06d60.png b/.cache/plugin/social/b2c932034761473e5c3ca85ba2c06d60.png new file mode 100644 index 000000000..f1c3656b2 Binary files /dev/null and b/.cache/plugin/social/b2c932034761473e5c3ca85ba2c06d60.png differ diff --git a/.cache/plugin/social/b34002fdbeb11e3c21f91741e20d901e.png b/.cache/plugin/social/b34002fdbeb11e3c21f91741e20d901e.png new file mode 100644 index 000000000..e9cbd9772 Binary files /dev/null and b/.cache/plugin/social/b34002fdbeb11e3c21f91741e20d901e.png differ diff --git a/.cache/plugin/social/b724b4cfa4eb2b0d86926adbe12c3d08.png b/.cache/plugin/social/b724b4cfa4eb2b0d86926adbe12c3d08.png new file mode 100644 index 000000000..a89b7e512 Binary files /dev/null and b/.cache/plugin/social/b724b4cfa4eb2b0d86926adbe12c3d08.png differ diff --git a/.cache/plugin/social/ba666c63537a4bc761f78a6d00d94604.png b/.cache/plugin/social/ba666c63537a4bc761f78a6d00d94604.png new file mode 100644 index 000000000..58d4600e1 Binary files /dev/null and b/.cache/plugin/social/ba666c63537a4bc761f78a6d00d94604.png differ diff --git a/.cache/plugin/social/bb13d868a71dce52c271d044c6d41e81.png b/.cache/plugin/social/bb13d868a71dce52c271d044c6d41e81.png new file mode 100644 index 000000000..d61909442 Binary files /dev/null and b/.cache/plugin/social/bb13d868a71dce52c271d044c6d41e81.png differ diff --git a/.cache/plugin/social/bd4cecedbfac6c423feb96a575132252.png b/.cache/plugin/social/bd4cecedbfac6c423feb96a575132252.png new file mode 100644 index 000000000..c1bf81020 Binary files /dev/null and b/.cache/plugin/social/bd4cecedbfac6c423feb96a575132252.png differ diff --git a/.cache/plugin/social/c1eeed13961693970b281498a46de056.png b/.cache/plugin/social/c1eeed13961693970b281498a46de056.png new file mode 100644 index 000000000..0e3bf4b2a Binary files /dev/null and b/.cache/plugin/social/c1eeed13961693970b281498a46de056.png differ diff --git a/.cache/plugin/social/c2b16f518219c363ee2f2e3317e6e81e.png b/.cache/plugin/social/c2b16f518219c363ee2f2e3317e6e81e.png new file mode 100644 index 000000000..8ada51f12 Binary files /dev/null and b/.cache/plugin/social/c2b16f518219c363ee2f2e3317e6e81e.png differ diff --git a/.cache/plugin/social/c36e6630203cd42f4d4d3461b2877820.png b/.cache/plugin/social/c36e6630203cd42f4d4d3461b2877820.png new file mode 100644 index 000000000..a284f062a Binary files /dev/null and b/.cache/plugin/social/c36e6630203cd42f4d4d3461b2877820.png differ diff --git a/.cache/plugin/social/c742c231c90a4cb560dda7f625f41ec8.png b/.cache/plugin/social/c742c231c90a4cb560dda7f625f41ec8.png new file mode 100644 index 000000000..19c8319fc Binary files /dev/null and b/.cache/plugin/social/c742c231c90a4cb560dda7f625f41ec8.png differ diff --git a/.cache/plugin/social/cda53353acfbb9a718f81f2e6da4ce8e.png b/.cache/plugin/social/cda53353acfbb9a718f81f2e6da4ce8e.png new file mode 100644 index 000000000..46d105885 Binary files /dev/null and b/.cache/plugin/social/cda53353acfbb9a718f81f2e6da4ce8e.png differ diff --git a/.cache/plugin/social/cde67c4609f7a2385a44b827f986d662.png b/.cache/plugin/social/cde67c4609f7a2385a44b827f986d662.png new file mode 100644 index 000000000..ce7bfece3 Binary files /dev/null and b/.cache/plugin/social/cde67c4609f7a2385a44b827f986d662.png differ diff --git a/.cache/plugin/social/d4225788a06876d98cd712bab0533e33.png b/.cache/plugin/social/d4225788a06876d98cd712bab0533e33.png new file mode 100644 index 000000000..c6ee573d8 Binary files /dev/null and b/.cache/plugin/social/d4225788a06876d98cd712bab0533e33.png differ diff --git a/.cache/plugin/social/d6c515c9b45b926de071bb2351e3d06a.png b/.cache/plugin/social/d6c515c9b45b926de071bb2351e3d06a.png new file mode 100644 index 000000000..00fc1faa8 Binary files /dev/null and b/.cache/plugin/social/d6c515c9b45b926de071bb2351e3d06a.png differ diff --git a/.cache/plugin/social/d7ea0476dd9c156cdffcf7ee8f47c27b.png b/.cache/plugin/social/d7ea0476dd9c156cdffcf7ee8f47c27b.png new file mode 100644 index 000000000..51343170a Binary files /dev/null and b/.cache/plugin/social/d7ea0476dd9c156cdffcf7ee8f47c27b.png differ diff --git a/.cache/plugin/social/d9a4c5d626a6d5df643bbd9a3de6fcb9.png b/.cache/plugin/social/d9a4c5d626a6d5df643bbd9a3de6fcb9.png new file mode 100644 index 000000000..4a7da6e67 Binary files /dev/null and b/.cache/plugin/social/d9a4c5d626a6d5df643bbd9a3de6fcb9.png differ diff --git a/.cache/plugin/social/da8b3db43e345283344b1d7f84c09f11.png b/.cache/plugin/social/da8b3db43e345283344b1d7f84c09f11.png new file mode 100644 index 000000000..6939e5234 Binary files /dev/null and b/.cache/plugin/social/da8b3db43e345283344b1d7f84c09f11.png differ diff --git a/.cache/plugin/social/dabd6b4125af3131407efbc4def0d8df.png b/.cache/plugin/social/dabd6b4125af3131407efbc4def0d8df.png new file mode 100644 index 000000000..c6d3e098b Binary files /dev/null and b/.cache/plugin/social/dabd6b4125af3131407efbc4def0d8df.png differ diff --git a/.cache/plugin/social/decc5acf854323cfe4eb56d2d7ceccdd.png b/.cache/plugin/social/decc5acf854323cfe4eb56d2d7ceccdd.png new file mode 100644 index 000000000..d4b0478b2 Binary files /dev/null and b/.cache/plugin/social/decc5acf854323cfe4eb56d2d7ceccdd.png differ diff --git a/.cache/plugin/social/df5fcba0444c5d4a615a3a3e30c1f569.png b/.cache/plugin/social/df5fcba0444c5d4a615a3a3e30c1f569.png new file mode 100644 index 000000000..402fd9888 Binary files /dev/null and b/.cache/plugin/social/df5fcba0444c5d4a615a3a3e30c1f569.png differ diff --git a/.cache/plugin/social/e143cf9cb1ffe3742d7af342c09fa9cd.png b/.cache/plugin/social/e143cf9cb1ffe3742d7af342c09fa9cd.png new file mode 100644 index 000000000..3e6cb0580 Binary files /dev/null and b/.cache/plugin/social/e143cf9cb1ffe3742d7af342c09fa9cd.png differ diff --git a/.cache/plugin/social/e6d5520ac9d5d3cc83cfe3bb2d6273a7.png b/.cache/plugin/social/e6d5520ac9d5d3cc83cfe3bb2d6273a7.png new file mode 100644 index 000000000..63623bd9d Binary files /dev/null and b/.cache/plugin/social/e6d5520ac9d5d3cc83cfe3bb2d6273a7.png differ diff --git a/.cache/plugin/social/e75fdbd7a49e9a5068b235eb20bdd9da.png b/.cache/plugin/social/e75fdbd7a49e9a5068b235eb20bdd9da.png new file mode 100644 index 000000000..a48360e38 Binary files /dev/null and b/.cache/plugin/social/e75fdbd7a49e9a5068b235eb20bdd9da.png differ diff --git a/.cache/plugin/social/e7a1aa3ab6da1b44c16cf6bac7440f7f.png b/.cache/plugin/social/e7a1aa3ab6da1b44c16cf6bac7440f7f.png new file mode 100644 index 000000000..bc7b386ca Binary files /dev/null and b/.cache/plugin/social/e7a1aa3ab6da1b44c16cf6bac7440f7f.png differ diff --git a/.cache/plugin/social/e84cac182306291347e85b8d3c8b1362.png b/.cache/plugin/social/e84cac182306291347e85b8d3c8b1362.png new file mode 100644 index 000000000..c57f915ad Binary files /dev/null and b/.cache/plugin/social/e84cac182306291347e85b8d3c8b1362.png differ diff --git a/.cache/plugin/social/ead2343019736d2dce320fbedb9db5d1.png b/.cache/plugin/social/ead2343019736d2dce320fbedb9db5d1.png new file mode 100644 index 000000000..2a75c7bae Binary files /dev/null and b/.cache/plugin/social/ead2343019736d2dce320fbedb9db5d1.png differ diff --git a/.cache/plugin/social/eca0211f2ee2924ee3164e49dd972a9d.png b/.cache/plugin/social/eca0211f2ee2924ee3164e49dd972a9d.png new file mode 100644 index 000000000..2b9d90405 Binary files /dev/null and b/.cache/plugin/social/eca0211f2ee2924ee3164e49dd972a9d.png differ diff --git a/.cache/plugin/social/ee342c78716f66f396439ece7fe009ed.png b/.cache/plugin/social/ee342c78716f66f396439ece7fe009ed.png new file mode 100644 index 000000000..c0d1ddad9 Binary files /dev/null and b/.cache/plugin/social/ee342c78716f66f396439ece7fe009ed.png differ diff --git a/.cache/plugin/social/f056ff11472836677f439fc68f159016.png b/.cache/plugin/social/f056ff11472836677f439fc68f159016.png new file mode 100644 index 000000000..c88395b5b Binary files /dev/null and b/.cache/plugin/social/f056ff11472836677f439fc68f159016.png differ diff --git a/.cache/plugin/social/f2cdcc175e28062415ad5ab4cb7bc5f5.png b/.cache/plugin/social/f2cdcc175e28062415ad5ab4cb7bc5f5.png new file mode 100644 index 000000000..484c0ac9d Binary files /dev/null and b/.cache/plugin/social/f2cdcc175e28062415ad5ab4cb7bc5f5.png differ diff --git a/.cache/plugin/social/f31fabe040619422ba3769683662efce.png b/.cache/plugin/social/f31fabe040619422ba3769683662efce.png new file mode 100644 index 000000000..a75837e4d Binary files /dev/null and b/.cache/plugin/social/f31fabe040619422ba3769683662efce.png differ diff --git a/.cache/plugin/social/f51e3a88dff7abee58380fae84180799.png b/.cache/plugin/social/f51e3a88dff7abee58380fae84180799.png new file mode 100644 index 000000000..e5a47715c Binary files /dev/null and b/.cache/plugin/social/f51e3a88dff7abee58380fae84180799.png differ diff --git a/.cache/plugin/social/fa3f8233483d61fe723e5aa8fd6af760.png b/.cache/plugin/social/fa3f8233483d61fe723e5aa8fd6af760.png new file mode 100644 index 000000000..7ea83d22d Binary files /dev/null and b/.cache/plugin/social/fa3f8233483d61fe723e5aa8fd6af760.png differ diff --git a/.cache/plugin/social/fb877385f5ef360c56ba06c40b6c0d5f.png b/.cache/plugin/social/fb877385f5ef360c56ba06c40b6c0d5f.png new file mode 100644 index 000000000..592abdc0d Binary files /dev/null and b/.cache/plugin/social/fb877385f5ef360c56ba06c40b6c0d5f.png differ diff --git a/docs/misc/photon/index.md b/docs/misc/photon/index.md index 2a107863f..e2a12dd49 100644 --- a/docs/misc/photon/index.md +++ b/docs/misc/photon/index.md @@ -12,6 +12,15 @@ The following is the basic Photon packet structure. The packet is made up of two parts: the header and the payload. The header contains exactly five bytes: "to" address, "from" address, packet ID, payload length, and the CRC. The payload *always* has at least one byte, either a command ID or a status. The payload can have optional further bytes. +``` mermaid +graph LR + A[Start] --> B{Error?}; + B -->|Yes| C[Hmm...]; + C --> D[Debug]; + D --> B; + B ---->|No| E[Yay!]; +``` + ## Header Bytes ### To Address diff --git a/docs/openpnp/debugging/feeder-rotation.md b/docs/openpnp/debugging/feeder-rotation.md new file mode 100644 index 000000000..adfed0b57 --- /dev/null +++ b/docs/openpnp/debugging/feeder-rotation.md @@ -0,0 +1,8 @@ +# 90 degree offset + +![parts rotated 90 degrees from their intended rotation](img/feeder-rotation.png){: style="width:60%;margin-left:10%;"} + +If some of your parts are placed with a 90 or 180 degree offset, there are a couple potential root causes: + +- **The feeder's rotation value needs adjustment.** When setting the position of a feeder, the rotation value you enter is equal to the initial rotation angle that the part is picked at. Adjust the `Rotation` field for the feeder of the part you notice is being placed incorrectly in increments of 90 degrees. +- **The part's vision pipeline needs adjustment.** If your rotation offset is consistently 90 or 180 degrees this is less likely, but it could still worth [adjusting that part's vision pipeline](../../vision-pipeline-adjustment/5-part-identification-pipeline.md). diff --git a/docs/openpnp/debugging/global-offset.md b/docs/openpnp/debugging/global-offset.md new file mode 100644 index 000000000..f298d97c2 --- /dev/null +++ b/docs/openpnp/debugging/global-offset.md @@ -0,0 +1,13 @@ +# Global offset + +![parts placed with a consistent global offset](img/global-offset.png){: style="width:60%;margin-left:10%;"} + +If parts are universally placed with an offset in the X and/or Y axis, there are a few potential root causes: + +- **Bottom camera position needs adjustment.** If OpenPnP's understanding of where the bottom camera is located is incorrect, part placements can also be incorrect. Perform a [nozzle offset calibration](/openpnp/calibration/6-nozzle-offset/) on one nozzle, then immediately [set the bottom camera position](/openpnp/calibration/7-bottom-camera-position/) without rotating the nozzle. +- **Fiducial calibration pipeline needs adjustment.** If OpenPnP incorrectly detects your fiducials and instead thinks a silkscreen marking or footprint pad is the fiducial, all of the locations on your board will be shifted. [Make sure your fiducial pipeline is correctly identifying your PCB's fiducials.](/openpnp/vision-pipeline-adjustment/3-pcb-fiducial-pipeline/) +- **Both nozzles need offset calibration adjustment.** It's possible that both of your nozzle offsets need adjusting. [Make sure your nozzle offsets are correct.](/openpnp/calibration/6-nozzle-offset/) +- **The LumenPnP skipped steps during motion.** If the LumenPnP's stepper motors encounter too much resistance, they can "skip steps" and lose their position. The way to confirm that this has happened is by navigating to `Machine Setup -> Heads`, clicking on `ReferenceHead H1` clicking the "Move camera to position" button next to the Homing Fiducial coordinates. If the camera is not centered on the homing fiducial, your machine has likely skipped steps. This can happen for a number of reasons: + - The machine's gantries interfered with something in the pick area, or something in your workspace. Check to make sure the machine is free to move easily and no cables are getting caught or tangled. + - LumenPnP models from v3.1 onward come with linear rails. These rails require proper lubrication to operate correctly. Lubricate your rails with the included lubrication packet. + - If you've increased your machine's travel speed, it's possible this is the reason for skipped steps. If the motors aren't capable of moving the machine at the requested speed, they will skip steps. Try lowering the machine's travel speed by navigating to `Machine Setup -> Drivers -> GcodeDriver GcodeDriver -> Driver Settings` and lower the value in the `Max. Feed Rate [/min]` field. \ No newline at end of file diff --git a/docs/openpnp/debugging/img/nozzle-offset.png b/docs/openpnp/debugging/img/nozzle-offset.png index d3af5b86b..67b127dc6 100644 Binary files a/docs/openpnp/debugging/img/nozzle-offset.png and b/docs/openpnp/debugging/img/nozzle-offset.png differ diff --git a/docs/openpnp/debugging/index.md b/docs/openpnp/debugging/index.md index 35a212acf..98e11af01 100644 --- a/docs/openpnp/debugging/index.md +++ b/docs/openpnp/debugging/index.md @@ -1,63 +1,47 @@ -# Debugging Placement Errors +--- +glightbox: false +--- -You might have found an inaccuracy or error when placing parts. This page address these errors, and how to go about fixing them. You might encounter a couple of these errors at once, so choose one to address before moving on. - -## Part placement is seemingly random - -![random offsets and rotations](img/random-offset.png) - -If your parts are being placed with seemingly random offsets and rotations, there are couple potential root causes: - -- **The board's Z position is too high.** If the nozzle isn't pushing the part into the board, it's dropping a short distance onto the board, and not being placed accurately. Lower the board's Z axis location in `0.10mm` increments until you see that the nozzle tip is just barely pushing into the board. -- **The part's height value is too large.** If OpenPnP thinks the part is taller than it is, it'll try to place the part too high up, even if the board Z position is correct. Select the relevant part in the `Parts` tab and lower the height value to be accurate. -- **Lack of suction force from the nozzle tip.** If your nozzle is correctly pushing the part into the board and you're still getting a seemingly random offset, it's likely a lack of suction on the nozzle tip. When the LumenPnP head moves, the part will still stay attached to the nozzle tip, but can rotate and shift because it isn't being held onto the nozzle tip with enough force. We call this shifting "pirouetting." There are two potential solves: - - Use a larger nozzle tip for that part. The larger the nozzle tip diameter, the more suction force the part is held with. - - Especially for the smallest N045 nozzle tip, some solder paste can get stuck in the tip, reducing suction force. If you cannot see a tiny circle of light shining through the tip when held up to a light, you might need to clean the tip with a thin wire and some isopropyl alcohol. - -## Every part placed **with a specific nozzle** is offset in X and/or Y +# Debugging -![parts placed with a consistent global offset for only one nozzle](img/nozzle-offset.png) +This page is a central repository for debugging OpenPnP errors. -If parts placed with a specific nozzle have a consistent offset in the X and/or Y axis, there are a couple potential root causes: +## Placement Errors -- **The nozzle offset for that nozzle needs adjustment.** If OpenPnP doesn't have an accurate idea of how far away a nozzle is from the top camera, it's going to place them with that inaccuracy. [Adjust that nozzle's offset](/openpnp/calibration/6-nozzle-offset). -- **The bottom vision pipeline for your parts needs adjustment.** OpenPnP decides how to place parts onto your board based on what it sees in the bottom camera view. If a bright light or reflective surface in view of the camera is making OpenPnP think your part is a different size than it is, you'll see a placement offset. [Adjust your part identification pipeline](/openpnp/vision-pipeline-adjustment/5). -- **The nozzle's tip calibration needs adjustment.** When OpenPnP performs a nozzle tip calibration, it profiles any runout in the nozzle tip. If this calibration does not correctly identify the nozzle tip, it can cause placement errors. [Adjust your nozzle tip calibration pipeline](/openpnp/vision-pipeline-adjustment/4-nozzle-calibration-pipeline/). - -## Every part placed **with either nozzle** is offset in X and/or Y - -![parts placed with a consistent global offset](img/global-offset.png) - -If parts are universally placed with an offset in the X and/or Y axis, there are a few potential root causes: - -- **Bottom camera position needs adjustment.** If OpenPnP's understanding of where the bottom camera is located is incorrect, part placements can also be incorrect. Perform a [nozzle offset calibration](/openpnp/calibration/6-nozzle-offset/) on one nozzle, then immediately [set the bottom camera position](/openpnp/calibration/7-bottom-camera-position/) without rotating the nozzle. -- **Fiducial calibration pipeline needs adjustment.** If OpenPnP incorrectly detects your fiducials and instead thinks a silkscreen marking or footprint pad is the fiducial, all of the locations on your board will be shifted. [Make sure your fiducial pipeline is correctly identifying your PCB's fiducials.](/openpnp/vision-pipeline-adjustment/3-pcb-fiducial-pipeline/) -- **Both nozzles need offset calibration adjustment.** It's possible that both of your nozzle offsets need adjusting. [Make sure your nozzle offsets are correct.](/openpnp/calibration/6-nozzle-offset/) -- **The LumenPnP skipped steps during motion.** If the LumenPnP's stepper motors encounter too much resistance, they can "skip steps" and lose their position. The way to confirm that this has happened is by navigating to `Machine Setup -> Heads`, clicking on `ReferenceHead H1` clicking the "Move camera to position" button next to the Homing Fiducial coordinates. If the camera is not centered on the homing fiducial, your machine has likely skipped steps. This can happen for a number of reasons: - - The machine's gantries interfered with something in the pick area, or something in your workspace. Check to make sure the machine is free to move easily and no cables are getting caught or tangled. - - LumenPnP models from v3.1 onward come with linear rails. These rails require proper lubrication to operate correctly. Lubricate your rails with the included lubrication packet. - - If you've increased your machine's travel speed, it's possible this is the reason for skipped steps. If the motors aren't capable of moving the machine at the requested speed, they will skip steps. Try lowering the machine's travel speed by navigating to `Machine Setup -> Drivers -> GcodeDriver GcodeDriver -> Driver Settings` and lower the value in the `Max. Feed Rate [/min]` field. +You might have found an inaccuracy or error when placing parts. This page address these errors, and how to go about fixing them. You might encounter a couple of these errors at once, so choose one to address before moving on. -## Parts are placed offset **relative to the part's orientation** +::cards:: cols=3 -![parts placed offset relative to the part's orientation](img/part-offset.png) +- title: Random offset + content: Parts are placed seemingly randomly. + image: img/random-offset.png + url: random-offset.md -If parts are placed offset **relative to the orientation of the footprint**, there are a couple potential root causes: +- title: Global offset + content: Every part is shifted the same amount in X and Y + image: img/global-offset.png + url: global-offset.md -- **The vision pipeline is inaccurate**. When OpenPnP processes the bottom vision image of a component on a nozzle, it's identifying the part's boundaries and uses that information to place it accurately. If OpenPnP incorrectly finds the boundaries of your part, it will place it inaccurately as well. This usually happens because the nozzle tip is visible by the bottom camera, and OpenPnP incorrectly thinks it's part of the component on the tip. To fix this: - - Lower your bottom camera's exposure according to [the instructions for nozzle tip calibration](/openpnp/calibration/8-nozzle-tip-calibration/nozzle-tip-calibration/). - - [Adjust your bottom vision pipeline](/openpnp/vision-pipeline-adjustment/5-part-identification-pipeline/) to make sure OpenPnP is correctly finding your component. +- title: Nozzle offset + content: All parts placed with a certain nozzle have offset + image: img/nozzle-offset.png + url: nozzle-offset.md -## Parts are rotated 90 or 180 degrees +- title: Part offset + content: Parts have offset relative to part's orientation + image: img/part-offset.png + url: part-offset.md -![parts rotated 90 degrees from their intended rotation](img/feeder-rotation.png) +- title: 90 degree offset + content: Parts are rotated in increments of 90 degrees + image: img/feeder-rotation.png + url: feeder-rotation.md -If some of your parts are placed with a 90 or 180 degree offset, there are a couple potential root causes: +::/cards:: -- **The feeder's rotation value needs adjustment.** When setting the position of a feeder, the rotation value you enter is equal to the initial rotation angle that the part is picked at. Adjust the `Rotation` field for the feeder of the part you notice is being placed incorrectly in increments of 90 degrees. -- **The part's vision pipeline needs adjustment.** If your rotation offset is consistently 90 or 180 degrees this is less likely, but it could still worth [adjusting that part's vision pipeline](../../vision-pipeline-adjustment/5-part-identification-pipeline.md). +## Miscellaneous Errors -## Part not picking +### Part not picking ![part fails picking](img/mispick.gif) @@ -67,7 +51,7 @@ If the nozzle is not picking parts consistently, there are a few potential root - **The feeder Z position is set too high.** If the machine is told to pick a part slightly too high, the nozzle tip doesn't make a good seal on the part, and fails to pick. This is solved by adjusting the [feeder's height](../1-installing-the-feeders/index.md). - **Lack of suction force from the nozzle tip.** Especially for the smallest N045 nozzle tip, some solder paste can get stuck in the tip, reducing suction force. If you cannot see a tiny circle of light shining through the tip when held up to a light, you might need to clean the tip with a thin wire and some isopropyl alcohol. -## "No result found" error +### "No result found" error ![no parts found error](/openpnp/vision-pipeline-adjustment/images/no-parts-found.png) diff --git a/docs/openpnp/debugging/nozzle-offset.md b/docs/openpnp/debugging/nozzle-offset.md new file mode 100644 index 000000000..9f950de4e --- /dev/null +++ b/docs/openpnp/debugging/nozzle-offset.md @@ -0,0 +1,10 @@ +# Nozzle offset + +![parts placed with a consistent global offset for only one nozzle](img/nozzle-offset.png){: style="width:60%;margin-left:10%;"} + +If parts placed with a specific nozzle have a consistent offset in the X and/or Y axis, there are a couple potential root causes: + +- **The nozzle offset for that nozzle needs adjustment.** If OpenPnP doesn't have an accurate idea of how far away a nozzle is from the top camera, it's going to place them with that inaccuracy. [Adjust that nozzle's offset](/openpnp/calibration/6-nozzle-offset). +- **The bottom vision pipeline for your parts needs adjustment.** OpenPnP decides how to place parts onto your board based on what it sees in the bottom camera view. If a bright light or reflective surface in view of the camera is making OpenPnP think your part is a different size than it is, you'll see a placement offset. [Adjust your part identification pipeline](/openpnp/vision-pipeline-adjustment/5). +- **The nozzle's tip calibration needs adjustment.** When OpenPnP performs a nozzle tip calibration, it profiles any runout in the nozzle tip. If this calibration does not correctly identify the nozzle tip, it can cause placement errors. [Adjust your nozzle tip calibration pipeline](/openpnp/vision-pipeline-adjustment/4-nozzle-calibration-pipeline/). + diff --git a/docs/openpnp/debugging/part-offset.md b/docs/openpnp/debugging/part-offset.md new file mode 100644 index 000000000..9365e7743 --- /dev/null +++ b/docs/openpnp/debugging/part-offset.md @@ -0,0 +1,9 @@ +# Part offset + +![parts placed offset relative to the part's orientation](img/part-offset.png){: style="width:60%;margin-left:10%;"} + +If parts are placed offset **relative to the orientation of the footprint**, there are a couple potential root causes: + +- **The vision pipeline is inaccurate**. When OpenPnP processes the bottom vision image of a component on a nozzle, it's identifying the part's boundaries and uses that information to place it accurately. If OpenPnP incorrectly finds the boundaries of your part, it will place it inaccurately as well. This usually happens because the nozzle tip is visible by the bottom camera, and OpenPnP incorrectly thinks it's part of the component on the tip. To fix this: + - Lower your bottom camera's exposure according to [the instructions for nozzle tip calibration](/openpnp/calibration/8-nozzle-tip-calibration/nozzle-tip-calibration/). + - [Adjust your bottom vision pipeline](/openpnp/vision-pipeline-adjustment/5-part-identification-pipeline/) to make sure OpenPnP is correctly finding your component. diff --git a/docs/openpnp/debugging/random-offset.md b/docs/openpnp/debugging/random-offset.md new file mode 100644 index 000000000..27ae22ceb --- /dev/null +++ b/docs/openpnp/debugging/random-offset.md @@ -0,0 +1,11 @@ +# Random offset + +![random offsets and rotations](img/random-offset.png){: style="width:60%;margin-left:10%;"} + +If your parts are being placed with seemingly random offsets and rotations, there are couple potential root causes: + +- **The board's Z position is too high.** If the nozzle isn't pushing the part into the board, it's dropping a short distance onto the board, and not being placed accurately. Lower the board's Z axis location in `0.10mm` increments until you see that the nozzle tip is just barely pushing into the board. +- **The part's height value is too large.** If OpenPnP thinks the part is taller than it is, it'll try to place the part too high up, even if the board Z position is correct. Select the relevant part in the `Parts` tab and lower the height value to be accurate. +- **Lack of suction force from the nozzle tip.** If your nozzle is correctly pushing the part into the board and you're still getting a seemingly random offset, it's likely a lack of suction on the nozzle tip. When the LumenPnP head moves, the part will still stay attached to the nozzle tip, but can rotate and shift because it isn't being held onto the nozzle tip with enough force. We call this shifting "pirouetting." There are two potential solves: + - Use a larger nozzle tip for that part. The larger the nozzle tip diameter, the more suction force the part is held with. + - Especially for the smallest N045 nozzle tip, some solder paste can get stuck in the tip, reducing suction force. If you cannot see a tiny circle of light shining through the tip when held up to a light, you might need to clean the tip with a thin wire and some isopropyl alcohol. diff --git a/docs/stylesheets/neoteroi-cards.css b/docs/stylesheets/neoteroi-cards.css new file mode 100644 index 000000000..7a2027bc2 --- /dev/null +++ b/docs/stylesheets/neoteroi-cards.css @@ -0,0 +1,103 @@ +.nt-cards.nt-grid { + display: grid; + grid-auto-columns: 1fr; + gap: 0.5rem; + max-width: 100vw; + overflow-x: auto; + padding: 1px; +} +.nt-cards.nt-grid.cols-1 { + grid-template-columns: repeat(1, 1fr); +} +.nt-cards.nt-grid.cols-2 { + grid-template-columns: repeat(2, 1fr); +} +.nt-cards.nt-grid.cols-3 { + grid-template-columns: repeat(3, 1fr); +} +.nt-cards.nt-grid.cols-4 { + grid-template-columns: repeat(4, 1fr); +} +.nt-cards.nt-grid.cols-5 { + grid-template-columns: repeat(5, 1fr); +} +.nt-cards.nt-grid.cols-6 { + grid-template-columns: repeat(6, 1fr); +} + +@media only screen and (max-width: 400px) { + .nt-cards.nt-grid { + grid-template-columns: repeat(1, 1fr) !important; + } +} +.nt-card { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} +.nt-card:hover { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.24), 0 3px 1px -2px rgba(0, 0, 0, 0.3), 0 1px 5px 0 rgba(0, 0, 0, 0.22); +} + +[data-md-color-scheme=slate] .nt-card { + box-shadow: 0 2px 2px 0 rgba(4, 40, 33, 0.14), 0 3px 1px -2px rgba(40, 86, 94, 0.47), 0 1px 5px 0 rgba(223, 167, 0, 0.64); +} +[data-md-color-scheme=slate] .nt-card:hover { + box-shadow: 0 2px 2px 0 rgba(0, 255, 206, 0.14), 0 3px 1px -2px rgba(33, 156, 177, 0.47), 0 1px 5px 0 rgba(245, 191, 30, 0.64); +} + +.nt-card > a { + color: var(--md-default-fg-color); +} + +.nt-card > a > div { + cursor: pointer; +} + +.nt-card { + padding: 5px; + margin-bottom: 0.5rem; +} + +.nt-card-title { + font-size: 1rem; + font-weight: bold; + margin: 4px 0 8px 0; + line-height: 22px; +} + +.nt-card-content { + padding: 0.4rem 0.8rem 0.8rem 0.8rem; +} + +.nt-card-text { + font-size: 14px; + padding: 0; + margin: 0; +} + +.nt-card .nt-card-image { + text-align: center; + border-radius: 2px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + min-height: 120px; +} + +.nt-card .nt-card-image.tags img { + margin-top: 12px; +} + +.nt-card .nt-card-image img { + /* height: 105px; */ + width: 98%; + margin: 1%; +} + +.nt-card a:hover, +.nt-card a:focus { + color: var(--md-accent-fg-color); +} + +.nt-card h2 { + margin: 0; +} diff --git a/mkdocs.yml b/mkdocs.yml index 4b7ea54ba..69a902831 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -3,15 +3,27 @@ site_url: https://docs.opulo.io/ repo_url: https://github.com/opulo-inc/lumenpnp/ edit_uri: https://github.com/opulo-inc/docs/edit/main/docs -extra_css: [stylesheets/extra.css] +extra_css: + - stylesheets/extra.css + - stylesheets/neoteroi-cards.css markdown_extensions: - admonition - def_list - pymdownx.superfences + - attr_list + - md_in_html + - neoteroi.cards + - meta - footnotes - pymdownx.tabbed: alternate_style: true + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format + theme: name: material @@ -26,6 +38,7 @@ theme: - navigation.tabs.sticky - content.tabs.link - content.action.edit + - toc.integrate palette: #primary: custom @@ -47,9 +60,12 @@ theme: icon: material/brightness-7 name: Switch to dark mode plugins: - - glightbox: + - glightbox: draggable: false - - search + - search + - social + - neoteroi.mkdocsoad: + use_pymdownx: true extra: social: - icon: fontawesome/brands/facebook-f @@ -122,7 +138,8 @@ nav: - Introduction: openpnp/ftp/index.md - Installing Feeders: openpnp/ftp/1-installing-the-feeders/index.md - Setting Up the Board: openpnp/ftp/2-setting-up-the-board/index.md - - Debugging Placement Errors: openpnp/debugging/index.md + - Debugging: openpnp/debugging/index.md + - Vision Pipeline Adjustment: - Introduction: openpnp/vision-pipeline-adjustment/1-introduction.md - Homing Fiducial Pipeline: openpnp/vision-pipeline-adjustment/2-homing-fiducial-pipeline.md diff --git a/requirements.txt b/requirements.txt index d08a2ed6d..5ff724be8 100644 Binary files a/requirements.txt and b/requirements.txt differ