Introduction: Four-Bar-Linkage Leaflet-Distributing Robot
Recently, with some new plain bearings at hand, we tried to build a linkage structure just for performance testing. While in the process of testing, the idea of building a leaflet-distributing robot just came out gradually. We did, after several attempts, succeed in building a robot which can distribute leaflets automatically.
All parts are from:www.makeblock.com
Construction Process:
Step 1: Step 1: Build the Base
Part List:
2 x Beam 0824-176
2 x Beam 0824-128
2 x Beam 0824-320
4 x Rubber Foot
Step 2: Build the Linkage
The linkage, driven by the motion of gearing, can rotate freely to get leaflets (imagine the working mode of the dump truck). Widely applied in building robots, the plain linkage can achieve various motion functions by adjusting its length and being fixed on different location.
Part List:
2 x Beam 0808-136
1 x Beam 0808-184
2 x Beam 0824-48
1 x Disc 1 x Gear-48T
2 x Shaft Several Axle Sleeves and Spacers
Step 3: Install the Linkage Onto the Bracket
Part List:
2 x Plain Bearing 1 x Shaft
Step 4:
Install suction cup and air pump bracket
Part List:
1 x Disc D72 2 x Suction Cup
Step 5: Build Leaflet Bracket
Part List:
2 x Beam 0824-160
2 x Beam 0808-168
2 x Beam 0824-96
2 x Plate 45°
Step 6: Install Motor, Air Pump and Circuit
Part List:
1 x DC Motor-25mm
1 x Vacuum Pump Motor
1 x Ultrasonic Sensor
1 x Me Orion
1 x RJ25 Adapter Several Plastic Pipes and Wires
In step 6, the ultrasonic sensor is used for detecting whether the leaflet has been taken by people or not. As in the picture, we welded a wire on a shaft and a sheet metal on a beam 0808. When the linkage reaches its extreme position, the shaft and sheet metal will be connected to achieve a limit function.
Step 7:
Simple control code: use the ultrasonic sensor to sense leaflets and control the four-bar linkage to start a reciprocating motion to distribute leaflets.
<p>#include </p><p>#define PAPER_DIS 8</p><p>MeDCMotor pump(M1); MeDCMotor arm(M2); MeUltrasonicSensor dis(PORT_3); MeLimitSwitch limit(PORT_4, SLOT1);</p><p>unsigned long startTime = 0; unsigned long currentTime = 0;</p><p>void setup() { Serial.begin(9600); arm.run(180); startTime = millis(); do { currentTime = millis(); } while(!((limit.touched()) || (currentTime - startTime > 3000))); arm.stop(); }</p><p>void loop() { while (!paperDetected()) { arm.run(-250); while (!paperDetected()) { delay(100); } pump.run(255); delay(1200); arm.stop(); delay(500); // Raise arm.run(180); delay(1500); } startTime = millis(); do { currentTime = millis(); } while(!((limit.touched()) || (currentTime - startTime > 3000))); arm.stop(); pump.run(200); }</p><p>int paperDetected() { float distance = 0; do { distance = dis.distanceCm(); } while (distance < 2); if (distance < PAPER_DIS) { return 1; } else { return 0; } }</p>