Perancangan Tempat Sampah Otomatis Berbasis Mikrokontroler Arduino
A-1
LAMPIRAN
LISTING PROGRAM
#include
#define trigPinS 3
#define echoPinS 4
#define trigPinl 5
#define echoPinl 6
#define play 12 //pin isd1820
long
long
long
long
SensorIN;
SensorOUT;
tempoa;
tempob;
Servo myservo;
int8_t button = 10;
int ledmerah = 7;
int ledkuning = 8;
int ledhijau = 9;
void setup() {
myservo.attach(2);
myservo.write(0);
digitalWrite(play, LOW);
Serial.begin(9600);
//HCSR
pinMode(trigPinS, OUTPUT);
pinMode(echoPinS, INPUT);
pinMode(trigPinl, OUTPUT);
pinMode(echoPinl, INPUT);
//LED
pinMode(ledmerah, OUTPUT);
pinMode(ledkuning, OUTPUT);
pinMode(ledhijau, OUTPUT);
//Button
pinMode(button, INPUT);
}
int8_t hcsr()
Universitas Sumatera Utara
A-2
digitalWrite(trigPinS, LOW);
delayMicroseconds(10);
digitalWrite(trigPinS, HIGH);
delayMicroseconds(10);
tempoa = pulseIn(echoPinS, HIGH);
SensorIN = int(0.017 * tiempoa);
digitalWrite(trigPinl, LOW);
delayMicroseconds(10);
digitalWrite(trigPinl, HIGH);
delayMicroseconds(10);
tempob = pulseIn(echoPinl, HIGH);
SensorOUT = int(0.017 * tiempob);
if (SensorIN < 5) {
digitalWrite(ledmerah, HIGH);
Serial.println("Led MERAH");
//delay(25);
}
else if (SensorIN < 20 && SensorIN > 5) {
digitalWrite(ledkuning, HIGH);
Serial.println("Led KUNING");
//delay(25);
}
else {
digitalWrite(ledhijau, HIGH);
Serial.println("Led HIJAU");
//delay(25);
}
Serial.print(SensorOUT);
Serial.print(" || ");
Serial.println(SensorIN);
if (SensorOUT < 70 && SensorOUT > 0 && SensorIN > 8) {
Universitas Sumatera Utara
A-3
myservo.write(95);
Serial.println("Servo Terbuka");
delay(3000);
// sound
digitalWrite(play, HIGH);
}
else {
myservo.write(15);
digitalWrite(play, LOW);
delay(10);
}
}
int8_t btn() {
myservo.write(95);
Serial.println("Button Ditekan");
delay(8000);
}
void loop(){
digitalWrite(play, LOW);
digitalWrite(ledmerah, LOW);
digitalWrite(ledkuning, LOW);
digitalWrite(ledhijau, LOW);
if (digitalRead(button) == LOW) {
btn();
}
else {
hcsr();
}
delay(250);
Universitas Sumatera Utara
B-1
LIBRARY MOTOR SERVO
A servo is activated by creating an instance of the Servo class passing
the desired pin to the attach() method.
The servos are pulsed in the background using the value most recently
written using the write() method.
Note that analogWrite of PWM on pins associated with the timer are
disabled when the first servo is attached.
Timers are seized as needed in groups of 12 servos - 24 servos use two
timers, 48 servos will use four.
The sequence used to sieze timers is defined in timers.h
The methods are:
Servo - Class for manipulating servo motors connected to Arduino pins.
attach(pin )
- Attaches a servo motor to an i/o pin.
attach(pin, min, max
microseconds
) - Attaches to a pin setting min and max values in
default min is 544, max is 2400
write()
- Sets the servo angle in degrees. (invalid angle that is
valid as pulse in microseconds is treated as microseconds)
writeMicroseconds() - Sets the servo pulse width in microseconds
read()
0 and 180.
- Gets the last written servo pulse width as an angle between
readMicroseconds()
- Gets the last written servo pulse width in
microseconds. (was read_us() in first release)
attached()
- Returns true if there is a servo attached.
detach()
- Stops an attached servos from pulsing its i/o pin.
*/
Universitas Sumatera Utara
B-2
#ifndef Servo_h
#define Servo_h
#include
/*
* Defines for 16 bit timers used with
Servo library
*
* If _useTimerX is defined then TimerX is a 16 bit timer on the current
board
* timer16_Sequence_t enumerates the sequence that the timers should be
allocated
* _Nbr_16timers indicates how many 16 bit timers are available.
*/
// Architecture specific include
#if defined(ARDUINO_ARCH_AVR)
#include "avr/ServoTimers.h"
#elif defined(ARDUINO_ARCH_SAM)
#include "sam/ServoTimers.h"
#elif defined(ARDUINO_ARCH_SAMD)
#include "samd/ServoTimers.h"
#else
#error "This library only supports boards with an AVR, SAM or SAMD
processor."
#endif
#define Servo_VERSION
2
#define MIN_PULSE_WIDTH
544
#define MAX_PULSE_WIDTH
2400
// software version of this library
// the shortest pulse sent to a servo
// the longest pulse sent to a serv
Universitas Sumatera Utara
B-3
#define DEFAULT_PULSE_WIDTH
attached
1500
// default pulse width when servo is
#define REFRESH_INTERVAL
microseconds
20000
// minumim time to refresh servos in
#define SERVOS_PER_TIMER
controlled by one timer
12
#define MAX_SERVOS
(_Nbr_16timers
#define INVALID_SERVO
index
typedef struct
* SERVOS_PER_TIMER)
// flag indicating an invalid servo
{
uint8_t nbr
uint8_t isActive
not pulsed if false
} ServoPin_t
255
// the maximum number of servos
:6 ;
// a pin number from 0 to 63
:1 ;
// true if this channel is enabled, pin
;
typedef struct {
ServoPin_t Pin;
volatile unsigned int ticks;
} servo_t;
class Servo
{
public:
Servo();
uint8_t attach(int pin);
// attach the given pin to the next free
channel, sets pinMode, returns channel number or 0 if failure
uint8_t attach(int pin, int min, int max); // as above but also sets min
and max values for writes.
void detach();
void write(int value);
// if value is < 200 its treated as an
angle, otherwise as pulse width in microseconds
void writeMicroseconds(int value); // Write pulse width in microseconds
int read();
angle between 0 and 180 degrees
// returns current pulse width as an
Universitas Sumatera Utara
B-4
int readMicroseconds();
// returns current pulse width in
microseconds for this servo (was read_us() in first release)
bool attached();
attached, otherwise false
// return true if this servo is
private:
uint8_t servoIndex;
servo
// index into the channel data for this
int8_t min;
to MIN_PULSE_WIDTH
// minimum is this value times 4 added
int8_t max;
to MAX_PULSE_WIDTH
// maximum is this value times 4 added
};
#endif
Universitas Sumatera Utara
C-1
Curriculum Vitae
Aidil Syahputra
Medan, 1 Juni 1993
Tahun
Pendidikan
Kota
2014-Sekarang
Ekstensi S1 Ilmu Komputer Universitas Sumatera Utara
Medan
2011-2014
D3 Teknik Informatika Universitas Sumatera Utara
Medan
2008-2011
MAN 1 Medan
Medan
2005-2008
SMPN 3
Medan
1999-2005
SDN 090608
Medan
Universitas Sumatera Utara
LAMPIRAN
LISTING PROGRAM
#include
#define trigPinS 3
#define echoPinS 4
#define trigPinl 5
#define echoPinl 6
#define play 12 //pin isd1820
long
long
long
long
SensorIN;
SensorOUT;
tempoa;
tempob;
Servo myservo;
int8_t button = 10;
int ledmerah = 7;
int ledkuning = 8;
int ledhijau = 9;
void setup() {
myservo.attach(2);
myservo.write(0);
digitalWrite(play, LOW);
Serial.begin(9600);
//HCSR
pinMode(trigPinS, OUTPUT);
pinMode(echoPinS, INPUT);
pinMode(trigPinl, OUTPUT);
pinMode(echoPinl, INPUT);
//LED
pinMode(ledmerah, OUTPUT);
pinMode(ledkuning, OUTPUT);
pinMode(ledhijau, OUTPUT);
//Button
pinMode(button, INPUT);
}
int8_t hcsr()
Universitas Sumatera Utara
A-2
digitalWrite(trigPinS, LOW);
delayMicroseconds(10);
digitalWrite(trigPinS, HIGH);
delayMicroseconds(10);
tempoa = pulseIn(echoPinS, HIGH);
SensorIN = int(0.017 * tiempoa);
digitalWrite(trigPinl, LOW);
delayMicroseconds(10);
digitalWrite(trigPinl, HIGH);
delayMicroseconds(10);
tempob = pulseIn(echoPinl, HIGH);
SensorOUT = int(0.017 * tiempob);
if (SensorIN < 5) {
digitalWrite(ledmerah, HIGH);
Serial.println("Led MERAH");
//delay(25);
}
else if (SensorIN < 20 && SensorIN > 5) {
digitalWrite(ledkuning, HIGH);
Serial.println("Led KUNING");
//delay(25);
}
else {
digitalWrite(ledhijau, HIGH);
Serial.println("Led HIJAU");
//delay(25);
}
Serial.print(SensorOUT);
Serial.print(" || ");
Serial.println(SensorIN);
if (SensorOUT < 70 && SensorOUT > 0 && SensorIN > 8) {
Universitas Sumatera Utara
A-3
myservo.write(95);
Serial.println("Servo Terbuka");
delay(3000);
// sound
digitalWrite(play, HIGH);
}
else {
myservo.write(15);
digitalWrite(play, LOW);
delay(10);
}
}
int8_t btn() {
myservo.write(95);
Serial.println("Button Ditekan");
delay(8000);
}
void loop(){
digitalWrite(play, LOW);
digitalWrite(ledmerah, LOW);
digitalWrite(ledkuning, LOW);
digitalWrite(ledhijau, LOW);
if (digitalRead(button) == LOW) {
btn();
}
else {
hcsr();
}
delay(250);
Universitas Sumatera Utara
B-1
LIBRARY MOTOR SERVO
A servo is activated by creating an instance of the Servo class passing
the desired pin to the attach() method.
The servos are pulsed in the background using the value most recently
written using the write() method.
Note that analogWrite of PWM on pins associated with the timer are
disabled when the first servo is attached.
Timers are seized as needed in groups of 12 servos - 24 servos use two
timers, 48 servos will use four.
The sequence used to sieze timers is defined in timers.h
The methods are:
Servo - Class for manipulating servo motors connected to Arduino pins.
attach(pin )
- Attaches a servo motor to an i/o pin.
attach(pin, min, max
microseconds
) - Attaches to a pin setting min and max values in
default min is 544, max is 2400
write()
- Sets the servo angle in degrees. (invalid angle that is
valid as pulse in microseconds is treated as microseconds)
writeMicroseconds() - Sets the servo pulse width in microseconds
read()
0 and 180.
- Gets the last written servo pulse width as an angle between
readMicroseconds()
- Gets the last written servo pulse width in
microseconds. (was read_us() in first release)
attached()
- Returns true if there is a servo attached.
detach()
- Stops an attached servos from pulsing its i/o pin.
*/
Universitas Sumatera Utara
B-2
#ifndef Servo_h
#define Servo_h
#include
/*
* Defines for 16 bit timers used with
Servo library
*
* If _useTimerX is defined then TimerX is a 16 bit timer on the current
board
* timer16_Sequence_t enumerates the sequence that the timers should be
allocated
* _Nbr_16timers indicates how many 16 bit timers are available.
*/
// Architecture specific include
#if defined(ARDUINO_ARCH_AVR)
#include "avr/ServoTimers.h"
#elif defined(ARDUINO_ARCH_SAM)
#include "sam/ServoTimers.h"
#elif defined(ARDUINO_ARCH_SAMD)
#include "samd/ServoTimers.h"
#else
#error "This library only supports boards with an AVR, SAM or SAMD
processor."
#endif
#define Servo_VERSION
2
#define MIN_PULSE_WIDTH
544
#define MAX_PULSE_WIDTH
2400
// software version of this library
// the shortest pulse sent to a servo
// the longest pulse sent to a serv
Universitas Sumatera Utara
B-3
#define DEFAULT_PULSE_WIDTH
attached
1500
// default pulse width when servo is
#define REFRESH_INTERVAL
microseconds
20000
// minumim time to refresh servos in
#define SERVOS_PER_TIMER
controlled by one timer
12
#define MAX_SERVOS
(_Nbr_16timers
#define INVALID_SERVO
index
typedef struct
* SERVOS_PER_TIMER)
// flag indicating an invalid servo
{
uint8_t nbr
uint8_t isActive
not pulsed if false
} ServoPin_t
255
// the maximum number of servos
:6 ;
// a pin number from 0 to 63
:1 ;
// true if this channel is enabled, pin
;
typedef struct {
ServoPin_t Pin;
volatile unsigned int ticks;
} servo_t;
class Servo
{
public:
Servo();
uint8_t attach(int pin);
// attach the given pin to the next free
channel, sets pinMode, returns channel number or 0 if failure
uint8_t attach(int pin, int min, int max); // as above but also sets min
and max values for writes.
void detach();
void write(int value);
// if value is < 200 its treated as an
angle, otherwise as pulse width in microseconds
void writeMicroseconds(int value); // Write pulse width in microseconds
int read();
angle between 0 and 180 degrees
// returns current pulse width as an
Universitas Sumatera Utara
B-4
int readMicroseconds();
// returns current pulse width in
microseconds for this servo (was read_us() in first release)
bool attached();
attached, otherwise false
// return true if this servo is
private:
uint8_t servoIndex;
servo
// index into the channel data for this
int8_t min;
to MIN_PULSE_WIDTH
// minimum is this value times 4 added
int8_t max;
to MAX_PULSE_WIDTH
// maximum is this value times 4 added
};
#endif
Universitas Sumatera Utara
C-1
Curriculum Vitae
Aidil Syahputra
Medan, 1 Juni 1993
Tahun
Pendidikan
Kota
2014-Sekarang
Ekstensi S1 Ilmu Komputer Universitas Sumatera Utara
Medan
2011-2014
D3 Teknik Informatika Universitas Sumatera Utara
Medan
2008-2011
MAN 1 Medan
Medan
2005-2008
SMPN 3
Medan
1999-2005
SDN 090608
Medan
Universitas Sumatera Utara