From b99d44e26c6af9435cffe73778e89404b9e988c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yi=C4=9Fit=20=C3=87olako=C4=9Flu?= Date: Mon, 17 Aug 2020 18:12:08 +0300 Subject: [PATCH] Added README --- README.md | 14 ++++++++++++++ logo.png | Bin 0 -> 580987 bytes 2 files changed, 14 insertions(+) create mode 100644 README.md create mode 100644 logo.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b481ce --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +#FoodCloud +
+ +Foodcloud is a project that aims to ensure food safety and transparency between producers and consumer by continuosly tracking the ingredients used in a product from the farm to the supermarket. This is ensured and supported using several technological hardware & software that we have developed including a mobile app, an api and a robot that reorganizes the products in the shelf according to their best before date , therefore significantly decreasing food waste and ensuring 100% consumer safety. + +##How does it work? +We start tracking each raw ingredient in the farm and log every process that is applied on it and whether they were applied safely. I won't be getting into the logistics of how we are achieving this, however you can find a detialed report on it at the end of this README. After logging each process made on the ingredients, we stick a qr code that contains unique integer on the product which is associated with that product's details in our database. This QR code comes into play in two parts: firstly, it enables the user to access its every single detail by scanning th qr code using our mobile app(which also warns the user in case they have any allergies associated with their profile) and also in our robot BarcoShelf which scans the QR codes and uses them to figure out their Best Before Dates. + +##How does the robot work? +Even though the robot has a very simple function, there were lots of engineering issues that we had to overcome. Firstly, because we had to use at least one Ev3 according to the guidelines of the competition that we were participating in, we used an Ev3 which controls the motors according to the commands from our main controller Raspberry Pi. At first I planned to interface these two interface using the i2c protocol, however neither of those cards could act as a slave. So because of this, I had to add an Arduino Nano in between which connects to the Ev3 with i2c and RpI with Serial. It simply acts as a bridge and nothing else. After solving this problem, we encountered an even bigger software problem. The robot could only have space for one product which meant that we could not move two products at the same time. This was an especially hard problem for me since it was my first year in programming. However, I came up with a fairly elgeant solution which I will be explaining in the next chapters. +###How does the sorting work? + + + diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a6238252e4e21a8e0b2d75f9845d8a32bbb9c569 GIT binary patch literal 580987 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