iotapp-smart-trash-cans [] [] {"id":"smart-trash-cans","title":"Smart Trash Cans: Build smart trash cans that send maintenance alerts","metaDesc":"Reduce waste with smart trash cans that send alerts when they are full and keep track of when they are emptied.","tweet":"I'm building #IoT smart trash cans with @temboo, and you should too!","device_count":"single","devices":{"arduinoyun":"Arduino Y\u00fan","samsung_artik_ten":"Samsung ARTIK 10","samsung_artik_five":"Samsung ARTIK 5"},"description":"Monitor and log the fill level of city trash bins. Make more efficient use of sanitation department resources, and create rich datasets for city planners.","categories":["smart-cities"],"choreos":{"CreateEvent":{"uri":"Library\/Google\/Calendar\/CreateEvent","templateName":"GoogleCalendar","credentialDescription":"\nView calendar, event, and settings metadata, and create and update calendars and calendar events.\n ","description":"Create a new event in a specified calendar.","credentialInputs":[{"name":"ClientID","type":"string","description":"The Client ID provided by Google. Required unless providing a valid AccessToken.","placeholder":"123myClientId","callout":"Save your API Credentials to use with any Google Calendar Choreo in the Library."},{"name":"ClientSecret","type":"string","description":"The Client Secret provided by Google. Required unless providing a valid AccessToken.","placeholder":"mySecretKeyId"},{"name":"RefreshToken","type":"string","description":"An OAuth Refresh Token used to generate a new access token when the original token is expired. Required unless providing a valid AccessToken.","placeholder":"myRefreshToken"}],"inputs":[[{"name":"CalendarID","type":"string","description":"The unique ID for the calendar in which to add the event.","placeholder":"calendarID"},{"name":"EventTitle","type":"string","description":"The title for the new event.","placeholder":"Trash Can 1 Status Change","callout":"Each time the trash is emptied, we'll log it in a calendar event."}]]},"CreateTicket":{"uri":"Library\/Zendesk\/Tickets\/CreateTicket","templateName":"Zendesk","credentialDescription":"\nA slow response time = an unhappy customer. Perhaps you could use some customer service help? Zendesk delivers cloud-based customer service software that takes care of over 65 million folks around the world.\n ","description":"Creates a new ticket.","credentialInputs":[{"name":"Email","type":"string","description":"The email address you use to login to your Zendesk account.","callout":"Save your API Credentials to use with any Zendesk Tickets Choreo in the Library."},{"name":"Password","type":"password","description":"Your Zendesk password."},{"name":"Server","type":"string","description":"Your Zendesk domain and subdomain (e.g.,"}],"inputs":[[{"name":"Subject","type":"string","description":"The subject for the ticket that is being created.","placeholder":"Check Trash Can 1","callout":"As the trash fills up, a Zendesk ticket will be triggered containing a message that indicates how full the trash is."}]]}},"oauthWizard":{"title":"Obtain a Refresh Token","subtitle":"for use with Google Choreos","oauthBundle":"\/Library\/Google\/OAuth\/","steps":[{"title":"Populate your<br \/>Credentials","description":"<p>Copy the Client ID and Client Secret provided by Google, and paste them below.<\/p>","inputs":[{"name":"ClientID","type":"string","placeholder":"The client ID provided by Google when you register your application."},{"name":"ClientSecret","type":"string","placeholder":"The client Secret provided by Google when you register your application."},{"name":"Scope","type":"hidden","value":"https:\/\/\/auth\/calendar"}]},{"title":"Grant&nbsp;Authorization<br \/>from Google","description":"<p>Visit the URL below, or click \"Launch Authorization\" to grant Authorization from Google.<\/p>","authorization":true,"inputs":[{"name":"AuthorizationURL","type":"string","text":"","fromOutput":true}]},{"title":"Voila!<br \/>Your Refresh Token","description":"","templateName":"GoogleOAuth","inputs":[{"name":"ClientID","type":"string","fromOutput":true},{"name":"ClientSecret","type":"string","fromOutput":true},{"name":"RefreshToken","type":"string","fromOutput":true}]}]}}

Monitor and log the fill level of city trash bins. Make more efficient use of sanitation department resources, and create rich datasets for city planners.

We'll show you how to build it.

IR Distance Sensor
Like this sensor
Trash receptacle
Like this trash can

First, Sign up with or sign in to Google.

Create a new Calendar and name it bin status or anything you like. This will be used to log when a trash can has been emptied.

Create a new project from the Google developers console.

Enable Google's Calendar API for your application. This will allow your board to post to the calendar when the trash is emptied.

Add an OAuth 2.0 client ID credential. You may be prompted to configure a consent screen where you'll need to save a Product Name. Specify Web Application, then use the line below as the Redirect URI.

Sign up for a Zendesk account. We'll use Zendesk to send alerts when the trash is half full, three-quarters full, and completely full.

Find your Calendar ID in Calendar Settings in the Calendar Address section.

This application uses your board's local time when calculating Google Calendar dates. To ensure accuracy, your board's timezone should be set to UTC.

Connect the power and ground of your board to your breadboard.

When trash level exceeds the specified 50%, 75%, and 100% thresholds, a Zendesk ticket will be created.

We'll smooth our data in the code by looking at the average of the last 100 readings.

Connect the first pin of your IR distance sensor to

Connect the second pin of the sensor to ground, and the third pin to power.

Need help running the code?

Install for Samsung ARTIK

If this is the first time using Temboo, you'll need to set up your ARTIK board to find the Temboo libraries. To do so, you'll need to create the file temboo.conf in /etc/ Inside of temboo.conf, you'll want to copy the line below and paste it into the file:


After saving temboo.conf, run ldconfig from the command line to add the Temboo library directory to the system library search path.

You’ll also need to get the IP address of your ARTIK board using ifconfig. The example below shows the results when the ARTIK board is connected to the internet through an ethernet cable. The IP address you'll want to use is listed next to inet.

[root@localhost ~]$ ifconfig
eth0: flags=4163  mtu 1500
inet  netmask  broadcast

Run the code

Download and unzip the IoT Application file. In your IoT Application folder, you'll find a Samsung folder containing the SmartTrashCans folder with code for the Artik. Copy the Samsung folder to your ARTIK board using scp. From your computer, go to the directory where the Samsung folder is located and type the command below. Make sure you use the IP address for your board you found using ifconfig.

[root@localhost ~]$ scp -r SmartTrashCans

Now cd into the directory on your Artik where you placed the folder and and compile and run your code using the command below.


Need help?

We're always happy to help. Just email us at, and we'll answer your questions.

Install for TI LaunchPad

Open the .ino file with Energia. While the sketch is running, open the Serial Monitor and you should see your app running.

Congratulations! Now that you know how to make your LaunchPad run any Choreo, you're just a few steps away from making something extraordinary.

You can find more examples of how to use Temboo with your LaunchPad here.

Need help?

We're always happy to help. Just email us at, and we'll answer your questions.

Run the Sketch and rejoice

Save and upload your sketch to the Arduino Yún, and open the serial monitor.

Congratulations! You've just run an IoT Application. With Temboo handling all the small stuff, you're free to think big.

You can find lots of examples of how to use Temboo with your Yún here.

Need help?

We're always happy to help. Just email us at, and we'll answer your questions.

Running the iOS Application

Make sure you have the latest Xcode, which can be downloaded here.

Download the Code

Download the code at the link above.

Unzip the files where you can find them. You should see one folder containing the iOS code, and another containing the hardware device code.

Open the Xcode Project

Locate the .xcodeproj file in the iOS code. Open the file with Xcode and you should see all of the accompanying files in the Project navigator.

If the file titles in your Project navigator are red, you'll need to relink them by clicking control and selecting "Add Files to ", then select and add all of the files from the iot application folder contained in the iOS folder you downloaded. Control click and delete any of the unlinked files that appear in the Project navigator.

Download the iOS SDK

The latest Temboo iOS SDK can be downloaded here. Save and unzip it to a folder where you can find it.

Once again, you'll need to control-click on the top-level folder in your Xcode Project navigator. Select "Add Files to " and browse to where you saved the Temboo SDK, locate and click on the "core" folder inside the SDK "src" folder. Make sure that "copy items if needed" is unchecked and "Create groups" is selected, then and select "Add".

Repeat the above steps to add the appropriate files located in the SDk's src/library folder.

Run the App

Make sure you have a device selected in the simulator, and click the run button.

Congratulations! You should see the app displayed in the simulator window. Go ahead and try it out, and you should see the Choreo results printed to the console.

Need help?

We're always happy to help. Just email us at, and we'll answer your questions.