We create electronics kits and for this we have a lot of components. Not only assembling the kits but also for prototyping new kits. It is hard to keep track of all of these components and storing them and finding them can take a lot of time.
We have always been fascinated by logistics systems like the Amazon warehouses or the automated warehouse made by Ocado. So the only logical solution to our problem was to build an overengineered automated storage solution.
We already store our parts in small plastic containers, the goal of this project is to create a system that can store these containers and then on demand retrieve them for us. An AS/RS system with a crane riding between two racks seems like a good solution that is not over complicated.
We aim to keep the costs down, and use accessible components where possible.
Update: First integrated testWe did a lot of CAD design and before we continued tuning the design we wanted to do a basic test of the system.
We build a rig with some 3D printed parts, empty filament boxes and metal pipes. A temporary rack was made with some wood and 3D printed ridges.
To try the rig we made a very basic Arduino sketch using the SpeedyStepper library (you can also find the code in our Gitlab repository: https://gitlab.com/awesome-makes-public/automated-storage-and-retrieval-system).
#include <SpeedyStepper.h>
const int MOTOR_STEP_PIN = 2;
const int MOTOR_DIRECTION_PIN = 5;
const int MOTORY_STEP_PIN = 4;
const int MOTORY_DIRECTION_PIN = 7;
SpeedyStepper stepperX;
SpeedyStepper stepperY;
void setup()
Serial.begin(9600);
pinMode(8, OUTPUT);
digitalWrite(8, LOW);
stepperX.connectToPins(MOTOR_STEP_PIN, MOTOR_DIRECTION_PIN);
stepperY.connectToPins(MOTORY_STEP_PIN, MOTORY_DIRECTION_PIN);
}
void loop()
stepperX.setStepsPerRevolution(200 * 16);
stepperY.setStepsPerRevolution(200 * 16);
stepperX.setSpeedInRevolutionsPerSecond(1.5);
stepperX.setAccelerationInRevolutionsPerSecondPerSecond(1.0);
stepperY.setSpeedInRevolutionsPerSecond(1.5);
stepperY.setAccelerationInRevolutionsPerSecondPerSecond(1.0);
stepperX.setupRelativeMoveInRevolutions(-6);
stepperY.setupRelativeMoveInRevolutions(-8);
while (!stepperX.motionComplete() || !stepperY.motionComplete()) {
stepperX.processMovement();
stepperY.processMovement();
}
delay(1000);
stepperX.setupRelativeMoveInRevolutions(6);
stepperY.setupRelativeMoveInRevolutions(8);
while (!stepperX.motionComplete() || !stepperY.motionComplete()) {
stepperX.processMovement();
stepperY.processMovement();
}
delay(1000);
}
This is not the code used in the movie, we didn't save that properly so it got lost. This code just demonstrates some basic x/y movement. Once we have a better rig set up we will write some better code.
Update: Testing the extending platformWe designed and assembled an extending platform that will be used to pick up the pallets. It took some iterations.
We first used a 28BYJ-48 stepper motor to drive the platform but found it too slow.
We then switched to a continuous servo. That worked better than the stepper motor but now we had no control over positioning of the platform. We first tried to solve this by using an ACS712 current sensor. This sensor would measure the current used by the servo. When the platform reached its end position the current draw would increase. This was fun to play with but could never work. Firstly, this way we would not be able to return to the ‘home position’. Secondly, when the platform would pick up a container the current draw would also increase making it difficult to callibrate.
Finally we settled on using a combination of the continuous servo and limit switches. The limit switches have a roller on the end. This roller rides on a track and the track has some recesses.
The video below shows the first test of the platform. We wrote some simple arduino code to control the platform using the serial monitor.
Comments