Membuat Stabilizer Camera / Gimbal Menggunakan Microcontroller ATMega + Bascom AVR dan PID Control
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat untuk stabilizer camera atau penstabil posisi kamera atau dengan nama lain GIMBAL dengan menggunakan motor servo dan mikrokontroller ATMega16, sensor yang digunakan memang sensor umum yaitu GY-61 sehingga hasilnya memang kurang memuaskan, jika ingin lebih bagus hasilnya pakai sensor accelerometer / kemiringan yang bagus kualitasnya. servo yang dipakai yaitu servo HI-TECH sebanyak 3 buah. untuk lebih jelasnya berikut adalah skema dan programnya.
Dim Kpx As Single
Dim Kix As Single
Dim Kdx As Single
Dim Setpointx As Single
Dim Px As Single
Dim Pix As Single
Dim Pidx As Single
Dim Ix As Single
Dim Dx As Single
Dim Errorx As Single
Dim Errorxx As Single
Dim Sum_errx As Single
Dim Kpy As Single
Dim Kiy As Single
Dim Kdy As Single
Dim Setpointy As Single
Dim Py As Single
Dim Piy As Single
Dim Pidy As Single
Dim Iy As Single
Dim Dy As Single
Dim Errory As Single
Dim Errorxy As Single
Dim Sum_erry As Single
Akhirnya kami telah merilis dengan resmi kursus mikrokontroller Arduino untuk pemula dan khusus untuk daerah surabaya, jadi jika Anda berminat ingin bisa membuat alat-alat menggunakan mikrokontroller Arduino atau ingin membuat robot dengan Arduino maka bisa kursus di tempat kami. adapun biaya dan tempat yang kami tawarkan yaitu seperti berikut:
a. Waktu:
- 2 atau 3 Pertemuan ( maksimal 3 pertemuan )
b. Biaya Kursus:
- Kursus di rumah Tentor = Rp. 300.000 / orang
- Kursus di rumah peserta kursus / client + Transport = Rp. 500.000
c. Tempat:
- Di Rumah Tentor
- Di Rumah peserta / client
d. Materi:
- Basic I/O
- Mengakses LCD
- Mengakses Sensor Analog
- Mengakses komunikasi Serial
- Mengakses Motor DC dan Motor Servo
Jadi kami menawarkan kursus mikrokonroller Arduino untuk pemula dengan waktu pertemuan 2 atau 3 kali pertemuan dengan estimasi jam sekitar 2-3 jam tergantung kebutuhan, kemudian untuk tempat ada dua buah pilihan yang pertama yaitu kursus di rumah peserta atau client dengan spesifikasi biaya yaitu biaya kursus Rp. 300.000 dan biaya transport Rp. 200.000 jadi total Rp. 500.000, untuk kursus di rumah tentor biaya Rp. 300.000. tidak ada biaya transport. untuk waktu dan jam kursus menyesuaikan kegiatan dari peserta kursus. Minimal peserta kursus 1 orang dan tidak ada batas maksimal peserta artinya berapa pun peserta bisa dimulai kursusnya.
Demikian rincian yang kami tawarkan semoga bisa dicermati secara detail, jika tidak paham silahkan kontak via WA di nomer ini 085726496643 an Yanuar M. jika ingin membeli komponen yang kami ajarkan pada saat kursus bisa kami sediakan dengan biaya tersendiri dan tidak include biaya kursus. yang harus dibawa oleh peserta kursus yaitu buku dan laptop saja. Terima kasih
Membuat Alat Monitoring / Penghitung Barang Menggunakan Barcode Scanner MCR 12 ARDUINO dengan Interface VB 6 dan Database MS ACCESS
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana membuat sebuah alat untuk menghitung jumlah barang sekaligus melihat kode barcodenya, selain itu juga memunculkan informasi terkait barang tersebut pada interface vb 6 dengan database yang digunakan adalah MS ACCESS, jadi alat ini yang pertama akan men-scan barcode kemudian akan menghitung jumlah barang, kemudian akan mengirimkan kode barcode tersebut ke interface vb 6, pada interface vb 6 akan ditamplkan beberapa informasi seperti nama barang, tanggal produksi, tanggal kadaluarsa dan kode barcodenya, pada interface juga dilengkapi dengan beberapa buah tombol untuk insert data secara manual ke database jika data di database tidak mencantumkan kode barcode yang baru. alat ini menggunakan arduino sebagai kontrollernya dan Barcode scanner MCR 12 sebagai reader ITF 14 code nya, untuk lebih jelasnya berikut adalah skema dan programnya.
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
String barcode;
int jumlah = 0;
Dim Rs As Recordset
Set Rs = New ADODB.Recordset
Rs.Open SQl, Conn, adOpenDynamic
tbcode.Text = ""
tbproduksi.Text = ""
tbkadaluarsa.Text = ""
tbnama.Text = ""
End Sub
Private Sub cbselect_Click()
Dim SQl As String
Call dbConnect
SQl = "Select * from Table1 where Kode = '" & tbcode.Text & "'"
Dim Rs As Recordset
Set Rs = New ADODB.Recordset
Rs.Open SQl, Conn, adOpenDynamic, adLockOptimistic
If Not Rs.EOF Then
tbproduksi.Text = Rs!Produksi
tbkadaluarsa.Text = Rs!Kadaluarsa
tbnama.Text = Rs!Nama
End If
End Sub
Private Sub cmdConnect_Click()
Dim port As Integer
On Error GoTo errcode
If MSComm1.PortOpen = False Then
MSComm1.CommPort = Combo1.ListIndex + 1
MSComm1.RThreshold = 1
MSComm1.InputLen = 0
MSComm1.Settings = Combo2.List(Combo2.ListIndex) & ",N,8,1"
MSComm1.PortOpen = True
cmdConnect.Enabled = False
cmdDisconnect.Enabled = True
End If
Exit Sub
errcode:
MsgBox "Port Salah !", vbOKOnly, "Peringatan"
Combo1.SetFocus
End Sub
Private Sub cmdDisconnect_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Form_Load()
Dim i As Byte
For i = 1 To 16
Combo1.AddItem (i)
Next i
With Combo2
.AddItem "2400"
.AddItem "4800"
.AddItem "9600"
.AddItem "19200"
.AddItem "38400"
.AddItem "56600"
End With
Timer2.Enabled = False
cmdConnect.Enabled = True
cmdDisconnect.Enabled = False
End Sub
Private Sub Timer1_Timer()
Adodc2.Refresh
End Sub
Private Sub Timer2_Timer()
MSComm1_OnComm
End Sub
Private Sub Timer3_Timer()
Dim data As String
Dim buffer As String
If MSComm1.InBufferCount > 0 Then
tbnama.Text = ""
tbproduksi.Text = ""
tbkadaluarsa.Text = ""
tbcode.Text = ""
buffer = MSComm1.Input
data = Mid$(buffer, 1, 14)
tbcode.Text = data
End If
End Sub
Private Sub Timer4_Timer()
Dim SQl As String
Call dbConnect
SQl = "Select * from Table1 where Kode = '" & tbcode.Text & "'"
Dim Rs As Recordset
Set Rs = New ADODB.Recordset
Rs.Open SQl, Conn, adOpenDynamic, adLockOptimistic
If Not Rs.EOF Then
tbproduksi.Text = Rs!Produksi
tbkadaluarsa.Text = Rs!Kadaluarsa
tbnama.Text = Rs!Nama
End If
End Sub
//=============== modul1 ======================
Public Conn As New ADODB.Connection
Public Rs As New ADODB.Recordset
Public SQl As String
Public i As Byte
Public Sub dbConnect()
Set Conn = New ADODB.Connection
Conn.ConnectionString = strConn
Conn.Open
End Sub
Public Function strConn() As String
Set Conn = New ADODB.Connection
Set Rs = New ADODB.Recordset
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\yanuar\Desktop\Projek Mei -juni 2017 & PID\barcode\interface\Database1.mdb;Persist Security Info=False"
Mengakses DHT22 Sensor Suhu - Kelembaban dan RTC DS1307 BASCOM AVR
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat dengan menggunakan sensor suhu dan kelembaban DHT22 kemudian dilengkapi dengan RTC DS1307 untuk menampilkan waktunya. program yang digunakan adalah Bascom AVR, mikrokontroller yang dipakai adalah ATMega16 dengan interface pada lcd 16x2. jadi alat ini hanya mendeteksi suhu dan kelembaban serta menampilkan waktunya secara real time, saat suhu tertentu maka relay 1 akan on begitu pula dengan kelembaban, saat kelembaban tertentu maka akan menghidupkan relay 2. untuk lebih jelasnya berikut adalah skema dan programnya.
'czujnik podlaczony do PortD.6
Dht_put Alias Portd.6
Dht_get Alias Pind.6
Dht_io_set Alias Ddrd.6
Cls
Cursor Off
Dim Crc As Byte 'zmienna do przechowywania bajtów parzystosci
Dim Mybyte As Byte 'zmienna do obliczania bitu parzystosci
Dim Sensor_data As String * 40 'tutaj beda zapisywac sie dane z czujnika
Dim Count As Byte
Dim T As Word 'zmienna do przechowywania temperatury
Dim H As Word 'zmienna do przechowywania wilgotnosci
Dim S16 As String * 16 'zmienna do obliczania odebranych bitów
Dim Ti As Byte 'zmienna do przechowywania dziesietnej temperatury
Dim Hi As Byte 'zmienna do przechowywania dziesietnej wilgotnosci
Enable Interrupts
Config Sda = Portc.1
Config Scl = Portc.0
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Dim Oke As Integer
Dim Mark As Byte
Dim _sec As Byte
Dim _min As Byte
Dim _hour As Byte
Dim _day As Byte
Dim _month As Byte
Dim _year As Byte
Dim _weekday As Byte
Dim Sa(3) As String * 2
Dim Sb(3) As String * 2
Declare Sub Getdatetime
Declare Sub Settime
Declare Sub Getsec
Declare Sub Disptime
Declare Sub Dispdate
Declare Sub Format_00
Declare Sub Setdate
Declare Sub Subset
Dim I As Byte
Dim Flagset As Bit '0 = Waktu, 1 = Tanggal
Dim Flagreset As Bit
Dim Line1 As String * 1
Dim Weekday As Byte
Dim Jam_puluhan As Integer
Dim Jam_satuan As Integer
Dim Min_puluhan As Integer
Dim Min_satuan As Integer
Dim Sec_puluhan As Integer
Dim Sec_satuan As Integer
If H <= 60 Then
Portb.1 = 0
Elseif H > 60 Then
Portb.1 = 1
End If
If T >= 35 Then
Portb.0 = 0
Elseif T < 35 Then
Portb.0 = 1
End If
Loop
Sub Get_th(t As Word , H As Word)
Count = 0
Sensor_data = ""
Dht_io_set = 1 'robimy wyjscie z PD.6
Dht_put = 0 'ustawic magistrale w stan LOW
Waitms 1 'odczekac co najmniej 18ms
Dht_put = 1 'zwolnic magistrale
Waitus 20
Dht_io_set = 0 'robimy wejscie z PD.6
Waitus 40 'odczekaj 40 ms
If Dht_get = 1 Then 'jesli jest jeszcze jeden, ???? ?? ??? ?? ???????? 1
H = 1 'oznacza ze czujnik nie odpowiedzial
Exit Sub 'konczymy podprogram
End If
'jesli czujnik odpowiedzial i wyciagnal magistrale do ziemi kontynuujemy prace
Waitus 80 'czekamy jeszcze 80ms
If Dht_get = 0 Then 'jesli na linii jest nadal 0
H = 2 'oznacza czujnik zwariowal
Exit Sub 'konczymy podprogram
End If
'jesli wszystko pójdzie dobrze i czujnik zareagowal prawidlowo, mozemy kontynuowac
While Dht_get = 1 : Wend 'czekamy, az magistrala pokazuje 1
Do 'zaczynamy przyjmowac 40-bitowe dane
While Dht_get = 0 : Wend 'czekamy na ustawienie magistrali w stan 0
Waitus 30 'po wystapieniu stamu 0 czekac 30 ms
If Dht_get = 1 Then 'jesli na szynie 1
Sensor_data = Sensor_data + "1" 'zapisujemy do zmiennej ta ?????????? ? ?????????? ??? ???????
While Dht_get = 1 : Wend 'i czekamy az nadajnik wysle kolejny bit
Else 'w przeciwnym razie, jesli tam jest 0
Sensor_data = Sensor_data + "0" 'zapisujem je do zmiennej
End If
Incr Count 'zwiekszamy licznik
Loop Until Count = 40 'Powtarzaj te czynnosc dopóki licznik osiagnie liczbe 40
Dht_io_set = 1
Dht_put = 1
'zaczynamy rozkladac otrzymane dane
S16 = Left(sensor_data , 16)
H = Binval(s16)
H = H / 10
Hi = H Mod 10
S16 = Mid(sensor_data , 17 , 16)
T = Binval(s16)
T = T / 10
Ti = T Mod 10
Mybyte = T + H 'dodajemy wartosci temperatury i wilgotnosci
If Mybyte <> Crc Then 'jesli suma kontrolna sie nie zgadza
Lcd "error" 'Oznacza to, ze dane nie sa poprawne
End If
ARDUINO Fuzzy Logic Controller Mamdani untuk Monitoring Asap / Gas dan Temperature (suhu)
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat untuk monitoring suhu dan asap / gas dengan menggunakan metode fuzzy logic control mamdani untuk bisa menghasilkan putaran pada Fan AC yang optimal, alat ini menggunakan dua buah sensor yaitu sensor suhu ds18b20 dan sensor gas / asap MQ-2 dengan outputnya untuk kendali kipas AC. jadi saat kondisi panas dan ada asap kipas akan berputar cepat, jika kondisi dingin dan tidak ada asap maka kipas akan berputar lambat atau OFF, begitu seterusnya tergantung pada Fuzzy Rule yang dibuat, untuk lebih jelasnya berikut adalah skema dan programnya.
void setup()
{
Serial.begin(9600);
lcd.begin();
pinMode(AC_LOAD, OUTPUT); // Set AC Load pin as output (pin 6)
attachInterrupt(0, zero_cross_int, FALLING); // connect pin 2 arduino to output terminal of driver motor
}
void zero_cross_int() //function to be fired at the zero crossing
{
// Firing angle calculation : 1 full 50hz wave =1/50=20ms
// Every zerocrossing thus: (50hz)-> 10ms (1/2 Cycle)
// 10ms=10000us
// (10000us - 10us) / 128 = 70 (Approx)
if(output==on)
{
digitalWrite(AC_LOAD, LOW);
int dimtime = (70*dimming);
delayMicroseconds(dimtime); // Wait till firing the driver motor
digitalWrite(AC_LOAD, HIGH); // Fire the driver motor
}
else{digitalWrite(AC_LOAD, LOW);
} // Stop the driver motor
}
void loop()
{
output=on;
if ( !ds.search(addr)) {
ds.reset_search();
delay(250);
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// "count remain" gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
}