Smart Trash Can with Processing, 2 Arduinos and IR
This trash can use ultrasonic sensor to get data how filled it is. Then this data is transmited using IR diode and then to Processing.
Components and supplies
1
Jumper wires (generic)
1
Ultrasonic Sensor - HC-SR04 (Generic)
1
Arduino Mega 2560
1
IR receiver (generic)
1
IR transmitter (generic)
1
Breadboard (generic)
1
Resistor 220 ohm
1
Arduino UNO
Apps and platforms
1
Processing
1
Arduino IDE
Project description
Code
Trash can
c_cpp
Code for arduino uno on trash can
1#include <IRremote.h> 2IRsend irsend; 3 4int trig = 7; 5int ech = 8; 6long duration, distance; 7void setup() { 8 Serial.begin(9600); 9 pinMode(trig, OUTPUT); 10 pinMode(ech, INPUT); 11} 12 13void loop() { 14 digitalWrite(trig, LOW); 15 delayMicroseconds(2); 16 digitalWrite(trig, HIGH); 17 delayMicroseconds(10); 18 digitalWrite(trig, LOW); 19 duration = pulseIn(ech, HIGH); 20 distance = (duration / 2) / 29.1; 21 Serial.println(distance); 22 switch (distance) { 23 case 1: 24 irsend.sendSony(0x1, 12); 25 break; 26 case 2: 27 irsend.sendSony(0x2, 12); 28 break; 29 case 3: 30 irsend.sendSony(0x3, 12); 31 break; 32 case 4: 33 irsend.sendSony(0x4, 12); 34 break; 35 case 5: 36 irsend.sendSony(0x5, 12); 37 break; 38 case 6: 39 irsend.sendSony(0x6, 12); 40 break; 41 case 7: 42 irsend.sendSony(0x7, 12); 43 break; 44 case 8: 45 irsend.sendSony(0x8, 12); 46 break; 47 case 9: 48 irsend.sendSony(0x9, 12); 49 break; 50 case 10: 51 irsend.sendSony(0x10, 12); 52 break; 53 case 11: 54 irsend.sendSony(0x11, 12); 55 break; 56 case 12: 57 irsend.sendSony(0x12, 12); 58 break; 59 case 13: 60 irsend.sendSony(0x13, 12); 61 break; 62 case 14: 63 irsend.sendSony(0x14, 12); 64 break; 65 case 15: 66 irsend.sendSony(0x15, 12); 67 break; 68 case 16: 69 irsend.sendSony(0x16, 12); 70 break; 71 case 17: 72 irsend.sendSony(0x17, 12); 73 break; 74 case 18: 75 irsend.sendSony(0x18, 12); 76 break; 77 case 19: 78 irsend.sendSony(0x19, 12); 79 break; 80 case 20: 81 irsend.sendSony(0x20, 12); 82 break; 83 case 21: 84 irsend.sendSony(0x21, 12); 85 break; 86 } 87 delay(100); 88}
Code for reciver Arduino that writes serial data for processing.
c_cpp
1#include <IRremote.h> 2int RECV_PIN = 11; 3IRrecv irrecv(RECV_PIN); 4decode_results 5 results; 6 7void setup() { 8 Serial.begin(9600); 9 irrecv.enableIRIn(); 10 11 pinMode(48,OUTPUT); 12} 13 14void loop() { 15 if (irrecv.decode(&results)) 16 { 17 switch (results.value) { 18 case 0x1: 19 Serial.write(1); 20 21 break; 22 case 0x2: 23 Serial.write(2); 24 break; 25 26 case 0x3: 27 Serial.write(3); 28 break; 29 case 0x4: 30 31 Serial.write(4); 32 break; 33 case 0x5: 34 Serial.write(5); 35 36 break; 37 case 0x6: 38 Serial.write(6); 39 break; 40 41 case 0x7: 42 Serial.write(7); 43 break; 44 case 0x8: 45 46 Serial.write(8); 47 break; 48 case 0x9: 49 Serial.write(9); 50 51 break; 52 case 0x10: 53 Serial.write(10); 54 break; 55 56 case 0x11: 57 Serial.write(11); 58 break; 59 case 0x12: 60 61 Serial.write(12); 62 break; 63 case 0x13: 64 Serial.write(13); 65 66 break; 67 case 0x14: 68 Serial.write(14); 69 break; 70 71 case 0x15: 72 Serial.write(15); 73 break; 74 case 0x16: 75 76 Serial.write(16); 77 break; 78 case 0x17: 79 Serial.write(17); 80 81 break; 82 case 0x18: 83 Serial.write(18); 84 break; 85 86 case 0x19: 87 Serial.write(19); 88 break; 89 case 0x20: 90 91 Serial.write(20); 92 break; 93 case 0x21: 94 Serial.write(21); 95 96 break; 97 } 98 if (results.value<5) { 99 digitalWrite(48,1); 100 101 delay(100); 102 digitalWrite(48,0); 103 delay(200); 104 } 105 106 irrecv.resume(); 107 } 108 delay(100); 109}
Code for reciver Arduino that writes serial data for processing.
c_cpp
1#include <IRremote.h> 2int RECV_PIN = 11; 3IRrecv irrecv(RECV_PIN); 4decode_results results; 5 6void setup() { 7 Serial.begin(9600); 8 irrecv.enableIRIn(); 9 pinMode(48,OUTPUT); 10} 11 12void loop() { 13 if (irrecv.decode(&results)) { 14 switch (results.value) { 15 case 0x1: 16 Serial.write(1); 17 break; 18 case 0x2: 19 Serial.write(2); 20 break; 21 case 0x3: 22 Serial.write(3); 23 break; 24 case 0x4: 25 Serial.write(4); 26 break; 27 case 0x5: 28 Serial.write(5); 29 break; 30 case 0x6: 31 Serial.write(6); 32 break; 33 case 0x7: 34 Serial.write(7); 35 break; 36 case 0x8: 37 Serial.write(8); 38 break; 39 case 0x9: 40 Serial.write(9); 41 break; 42 case 0x10: 43 Serial.write(10); 44 break; 45 case 0x11: 46 Serial.write(11); 47 break; 48 case 0x12: 49 Serial.write(12); 50 break; 51 case 0x13: 52 Serial.write(13); 53 break; 54 case 0x14: 55 Serial.write(14); 56 break; 57 case 0x15: 58 Serial.write(15); 59 break; 60 case 0x16: 61 Serial.write(16); 62 break; 63 case 0x17: 64 Serial.write(17); 65 break; 66 case 0x18: 67 Serial.write(18); 68 break; 69 case 0x19: 70 Serial.write(19); 71 break; 72 case 0x20: 73 Serial.write(20); 74 break; 75 case 0x21: 76 Serial.write(21); 77 break; 78 } 79 if (results.value<5) { 80 digitalWrite(48,1); 81 delay(100); 82 digitalWrite(48,0); 83 delay(200); 84 } 85 irrecv.resume(); 86 } 87 delay(100); 88}
Processing sketch for visual representation for trash can
processing
1import processing.serial.*; 2 3Serial myPort; 4int val; 5 6PImage img; 7void setup() 8{ 9 size(590,800); 10 myPort = new Serial(this, "COM5", 9600);//change your port 11 img = loadImage("image.jpg"); 12} 13 14void draw() 15{ 16 background(255); 17 image(img, 1, 0); 18 if ( myPort.available() > 0) { 19 val = myPort.read(); 20 val = 21-val; 21 println(val); 22 } 23 textSize(20); 24 fill(0); 25 text("Trash can Nr1.",190,394); 26 fill(100); 27 rect(230,430,100,180); 28 fill(255,255,0); 29 if (val < 10) { 30 fill(0,255,0); 31 } 32 if (val > 15) { 33 fill(255,0,0); 34 } 35 rect(230,map(val,0,21,610,430),100,10); 36} 37
Trash can
c_cpp
Code for arduino uno on trash can
1#include <IRremote.h> 2IRsend irsend; 3 4int trig = 7; 5int ech = 8; 6long duration, distance; 7void setup() { 8 Serial.begin(9600); 9 pinMode(trig, OUTPUT); 10 pinMode(ech, INPUT); 11} 12 13void loop() { 14 digitalWrite(trig, LOW); 15 delayMicroseconds(2); 16 digitalWrite(trig, HIGH); 17 delayMicroseconds(10); 18 digitalWrite(trig, LOW); 19 duration = pulseIn(ech, HIGH); 20 distance = (duration / 2) / 29.1; 21 Serial.println(distance); 22 switch (distance) { 23 case 1: 24 irsend.sendSony(0x1, 12); 25 break; 26 case 2: 27 irsend.sendSony(0x2, 12); 28 break; 29 case 3: 30 irsend.sendSony(0x3, 12); 31 break; 32 case 4: 33 irsend.sendSony(0x4, 12); 34 break; 35 case 5: 36 irsend.sendSony(0x5, 12); 37 break; 38 case 6: 39 irsend.sendSony(0x6, 12); 40 break; 41 case 7: 42 irsend.sendSony(0x7, 12); 43 break; 44 case 8: 45 irsend.sendSony(0x8, 12); 46 break; 47 case 9: 48 irsend.sendSony(0x9, 12); 49 break; 50 case 10: 51 irsend.sendSony(0x10, 12); 52 break; 53 case 11: 54 irsend.sendSony(0x11, 12); 55 break; 56 case 12: 57 irsend.sendSony(0x12, 12); 58 break; 59 case 13: 60 irsend.sendSony(0x13, 12); 61 break; 62 case 14: 63 irsend.sendSony(0x14, 12); 64 break; 65 case 15: 66 irsend.sendSony(0x15, 12); 67 break; 68 case 16: 69 irsend.sendSony(0x16, 12); 70 break; 71 case 17: 72 irsend.sendSony(0x17, 12); 73 break; 74 case 18: 75 irsend.sendSony(0x18, 12); 76 break; 77 case 19: 78 irsend.sendSony(0x19, 12); 79 break; 80 case 20: 81 irsend.sendSony(0x20, 12); 82 break; 83 case 21: 84 irsend.sendSony(0x21, 12); 85 break; 86 } 87 delay(100); 88}
Downloadable files
Schematics
Schematics

Schematics
Schematics

Comments
Only logged in users can leave comments