Hallo Sobat Arduino Indonesia,
sudah pernah memprogram arduino sensor ultrasonic kan, pada kesempatan ini sedikit share bagaimana kalau cara program arduino dengan menggunakan banyak sensor ultrasonic, Nah kalau sudah bisa memprogram satu sensor ultrasonic pasti juga bisa memprogram untuk banyak sensor.
Kenapa harus banyak sensor ultrasonic?
nah Sobat bisa memanfaatkan banyak sensor misal untuk membuat robot wall follower, membuat robot sumo automatic/ otomatis, atau untuk membuat robot pemadam api.
Oke yang pertama di lakukan adalah inisialisasi pin pin yang akan di gunakan untuk sensor ultrasonic, berhubung kali ini kita ada modul yang memang di desain untuk banyak sensor ultrasonic jadinya tinggal colok colok kabel jumper saja.
untuk pemrograman arduin multi ultrasonic sensor bisa langsung di lihat berikut ini
sudah pernah memprogram arduino sensor ultrasonic kan, pada kesempatan ini sedikit share bagaimana kalau cara program arduino dengan menggunakan banyak sensor ultrasonic, Nah kalau sudah bisa memprogram satu sensor ultrasonic pasti juga bisa memprogram untuk banyak sensor.
Kenapa harus banyak sensor ultrasonic?
nah Sobat bisa memanfaatkan banyak sensor misal untuk membuat robot wall follower, membuat robot sumo automatic/ otomatis, atau untuk membuat robot pemadam api.
Oke yang pertama di lakukan adalah inisialisasi pin pin yang akan di gunakan untuk sensor ultrasonic, berhubung kali ini kita ada modul yang memang di desain untuk banyak sensor ultrasonic jadinya tinggal colok colok kabel jumper saja.
untuk pemrograman arduin multi ultrasonic sensor bisa langsung di lihat berikut ini
//ultrasonic 1
int echoPin1 =8;
int initPin1 =9;
int distance1 =0;
//ultrasonic 2
int echoPin2 =6;
int initPin2 =7;
int distance2 =0;
//ultrasonic 3
int echoPin3 =4;
int initPin3 =5;
int distance3 =0;
void setup() {
pinMode(initPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(initPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(initPin3, OUTPUT);
pinMode(echoPin3, INPUT);
Serial.begin(9600);
}
void loop() {
distance1 = getDistance(initPin1, echoPin1);
printDistance(1, distance1);
delay(150);
distance2 = getDistance(initPin2, echoPin2);
printDistance(2, distance2);
delay(150);
distance3 = getDistance(initPin3, echoPin3);
printDistance(3, distance3);
delay(150);
Serial.println("");
delay(500);
}
int getDistance (int initPin, int echoPin){
digitalWrite(initPin, HIGH);
delayMicroseconds(10);
digitalWrite(initPin, LOW);
unsigned long pulseTime = pulseIn(echoPin, HIGH);
int distance = pulseTime/58;
return distance;
}
void printDistance(int id, int dist){
Serial.print(id);
Serial.print("------>");
Serial.print(dist, DEC);
Serial.println(" cm");
}
Hallo Sobat Arduino Indonesia,
yuk belajar arduino lagi :). oke langsung saja ini karena di W/S Sekolah Robot Indonesia ada shield Driver Monster Moto. yuk kita program untuk menggerakkan motor DC.
oh ya kalau yang beli baru kadang-kadang ada yang harus nyolder dulu, gampang kok sobat. bisa cek di video dibawah ini ya.
Yang dibutuhkan pada percobaan kali ini,
yuk belajar arduino lagi :). oke langsung saja ini karena di W/S Sekolah Robot Indonesia ada shield Driver Monster Moto. yuk kita program untuk menggerakkan motor DC.
oh ya kalau yang beli baru kadang-kadang ada yang harus nyolder dulu, gampang kok sobat. bisa cek di video dibawah ini ya.
Yang dibutuhkan pada percobaan kali ini,
·
Arduino Uno
·
Driver Shield Monster Moto
·
Batterai
Driver Shield Monster Moto ini mempunyai pin yang digunakan adalah pin 7,4,8,9,5,6,2,3.
untuk konfigurasi pin bisa dilihat pada coding program berikut ini
/* MonsterMoto Shield Example Sketch
date: 5/24/11
code by: Jim Lindblom
hardware by: Nate Bernstein
SparkFun Electronics
License: CC-SA 3.0, feel free to use this code however you'd like.
Please improve upon it! Let me know how you've made it better.
This is really simple example code to get you some basic
functionality with the MonsterMoto Shield. The MonsterMote uses
two VNH2SP30 high-current full-bridge motor drivers.
Use the motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
function to get motors going in either CW, CCW, BRAKEVCC, or
BRAKEGND. Use motorOff(int motor) to turn a specific motor off.
The motor variable in each function should be either a 0 or a 1.
pwm in the motorGo function should be a value between 0 and 255.
*/
#define BRAKEVCC 0
#define CW 1
#define CCW 2
#define BRAKEGND 3
#define CS_THRESHOLD 100
/* VNH2SP30 pin definitions
xxx[0] controls '1' outputs
xxx[1] controls '2' outputs */
int inApin[2] = {7, 4}; // INA: Clockwise input
int inBpin[2] = {8, 9}; // INB: Counter-clockwise input
int pwmpin[2] = {5, 6}; // PWM input
int cspin[2] = {2, 3}; // CS: Current sense ANALOG input
int enpin[2] = {0, 1}; // EN: Status of switches output (Analog pin)
int statpin = 13;
void setup()
{
Serial.begin(9600);
pinMode(statpin, OUTPUT);
// Initialize digital pins as outputs
for (int i=0; i<2; i++)
{
pinMode(inApin[i], OUTPUT);
pinMode(inBpin[i], OUTPUT);
pinMode(pwmpin[i], OUTPUT);
}
// Initialize braked
for (int i=0; i<2; i++)
{
digitalWrite(inApin[i], LOW);
digitalWrite(inBpin[i], LOW);
}
// motorGo(0, CW, 1023);
// motorGo(1, CCW, 1023);
}
void loop()
{
motorGo(0, CW, 1023);
motorGo(1, CCW, 1023);
delay(500);
motorGo(0, CCW, 1023);
motorGo(1, CW, 1023);
delay(500);
if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
}
void motorOff(int motor)
{
// Initialize braked
for (int i=0; i<2; i++)
{
digitalWrite(inApin[i], LOW);
digitalWrite(inBpin[i], LOW);
}
analogWrite(pwmpin[motor], 0);
}
/* motorGo() will set a motor going in a specific direction
the motor will continue going in that direction, at that speed
until told to do otherwise.
motor: this should be either 0 or 1, will selet which of the two
motors to be controlled
direct: Should be between 0 and 3, with the following result
0: Brake to VCC
1: Clockwise
2: CounterClockwise
3: Brake to GND
pwm: should be a value between ? and 1023, higher the number, the faster
it'll go
*/
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
{
if (motor <= 1)
{
if (direct <=4)
{
// Set inA[motor]
if (direct <=1)
digitalWrite(inApin[motor], HIGH);
else
digitalWrite(inApin[motor], LOW);
// Set inB[motor]
if ((direct==0)||(direct==2))
digitalWrite(inBpin[motor], HIGH);
else
digitalWrite(inBpin[motor], LOW);
analogWrite(pwmpin[motor], pwm);
}
}
}
Tidak ada komentar:
Posting Komentar