
Merhaba Arkadaşlar;
Bu uygulamamda sizlere bir proje paylaşacağım. Bu Proje aslında sadece evimi internet üzerinden kamera ile görebilmekti fakat tasarım aşamasında biraz daha geliştirmek istedim ve işin içine küçük bir araç kontrolü girince ortaya bu proje çıktı.
Raspberry i seçmem hem C yazılım hemde kamera aktarım konusunda benim işimi kolaylaştırdı. Tabi Zero W ile bu iş az yer kapladı.
Projenin içinde çeşitli konular yer almaktadır:
- PWM ile DC motor sürme
- yine PWM ile servo motor kontrolü
- TCP IP Server uygulaması
-
MIT App Inventor 2 ile Android telefon ile veri transferi.
- Raspberry Pi yi Netbeans ile Programlama
- Wiring Pi ile GPIO kontrolü
- Multi Threading
- DQ ile DS18B20 okuma
Projede Kullanılan Malzemeler:
- Raspberry Pi Zero Wireless
- Raspberry Pi Kamera
- Raspberry Pi Zero Kamera Kablo
- 2 Tekerlekli (2WD) Akıllı Robot Araba Kiti
- L298N Çift Kanallı Motor Sürücü Kartı (Voltaj Regülatörlü)
- Mini Servo Motor
- Ultrasonik Mesafe Sensörü (HC-SR04)
- Powerbank (En Az 2600mA) (Pi için)
- DS18B20
- 6lı AAA Kalem Pil Yuvası
- Ön Far, Sinyal için 3mm LED ler. (isteğe bağlı)
İlk Olarak Raspberry Pi Zero W ya imaj atıp kurulur hale getirdikten sonra kamera kablosunu bağlayıp PUTTY ile bağlanarak gerekli ayarları yapalım.
Motion programını kuralım.
- sudo apt-get update
- sudo apt-get upgrade
- sudo apt-get install motion
Kurulum işlemi tamamlandıktan sonra motion programın gerekli ayarlarını yapalım. Bunun için belirtilen dosyanın içeriğini aşağıdaki gibi değiştirmeniz gerekiyor.
- sudo nano /etc/motion/motion.conf
(Dosyayı yukarıdaki komut ile açarak aşağıdaki değişkenleri kontrol ederek değiştirin)
daemon = off
process_id_file = /var/run/motion/motion.pid
setup_mode = off
logfile = (not defined)
log_level = 6
log_type = all
videodevice = /dev/video0
v4l2_palette = 17
input = -1
norm = 0
frequency = 0
rotate = 0
width = 640
height = 480
framerate = 25
minimum_frame_time = 0
netcam_url = (not defined)
netcam_userpass = (not defined)
netcam_keepalive = off
netcam_proxy = (not defined)
netcam_tolerant_check = off
auto_brightness = off
brightness = 0
contrast = 0
saturation = 0
hue = 0
roundrobin_frames = 1
roundrobin_skip = 1
switchfilter = off
threshold = 1500
threshold_tune = off
noise_level = 32
noise_tune = on
despeckle_filter = EedDl
area_detect = (not defined)
mask_file = (not defined)
smart_mask_speed = 0
lightswitch = 0
minimum_motion_frames = 1
pre_capture = 0
post_capture = 0
event_gap = 0
max_movie_time = 600
emulate_motion = off
output_pictures = off
output_debug_pictures = off
quality = 50
picture_type = jpeg
ffmpeg_output_movies = off
ffmpeg_output_debug_movies = off
ffmpeg_timelapse = 0
ffmpeg_timelapse_mode = daily
ffmpeg_bps = 500000
ffmpeg_variable_bitrate = 0
ffmpeg_video_codec = msmpeg4
ffmpeg_deinterlace = off
use_extpipe = off
extpipe = (not defined)
snapshot_interval = 0
locate_motion_mode = off
locate_motion_style = box
text_right = %Y-%m-%d\n%T-%q
text_left = (not defined)
text_changes = off
text_event = %Y%m%d%H%M%S
text_double = off
exif_text = (not defined)
target_dir = /home/pi/Videos
snapshot_filename = %v-%Y%m%d%H%M%S-snapshot
picture_filename = %v-%Y%m%d%H%M%S-%q
movie_filename = %v-%Y%m%d%H%M%S
timelapse_filename = %Y%m%d-timelapse
ipv6_enabled = off
stream_port = 8090
stream_quality = 50
stream_motion = off
stream_maxrate = 100
stream_localhost = off
stream_limit = 0
stream_auth_method = 0
stream_authentication = (not defined)
webcontrol_port = 8091
webcontrol_localhost = off
webcontrol_html_output = on
webcontrol_authentication = admin:1234
track_type = 0
track_auto = off
track_port = (not defined)
track_motorx = 0
track_motorx_reverse = off
track_motory = 0
track_motory_reverse = off
track_maxx = 0
track_minx = 0
track_maxy = 0
track_miny = 0
track_homex = 128
track_homey = 128
track_iomojo_id = 0
track_step_angle_x = 10
track_step_angle_y = 10
track_move_wait = 10
track_speed = 255
track_stepsize = 40
quiet = on
on_event_start = (not defined)
on_event_end = (not defined)
on_picture_save = (not defined)
on_motion_detected = (not defined)
on_area_detected = (not defined)
on_movie_start = (not defined)
on_movie_end = (not defined)
on_camera_lost = (not defined)
sql_log_picture = on
sql_log_snapshot = on
sql_log_movie = off
sql_log_timelapse = off
sql_query = sql_query insert into security(camera, filename, frame, file_type, time_stamp, event_time_stamp) values(‘%t’, ‘%f’, ‘%q’, ‘%n’, ‘%Y-%m-%d %T’, ‘%C’)
database_type = (not defined)
database_dbname = (not defined)
database_host = localhost
database_user = (not defined)
database_password = (not defined)
database_port = 0
sqlite3_db = (not defined)
video_pipe = (not defined)
motion_video_pipe = (not defined)
thread = No threads
Aynı şekilde bu dosyayı da aşağıdaki gibi değiştirin.
- sudo nano /etc/default/motion
start_motion_daemon=yes
Raspberry Pi nin donanım ayarlarından kamera modülünü açacağız.
- sudo raspi-config
Camera seçeneğini enable yaptıktan sonra Pi ye restart yapılır.
Ayarlar düzgün yapıldıktan sonra ve pi nin restart işleminden sonra kameranın otomatik devreye girdiğini yani kamera ledin yandığını göreceksiniz. Pi mizi kapatıp bağlantı ayarlarını yaptıktan sonra yazılım aşamasına geçeceğiz.
Araç şasesine montajı ben resimdeki gibi yaptım, sizler istediğiniz şekilde yapabilirsiniz.
Servo Motorun bağlantısı:
Pi için Kullandığım Powerbank bağlantısı: (Şase altına yapılmıştır.)
Genel Bağlantı Şeması:
*Bağlantı için WiringPi Pin:
Bağlantıları bitirdikten sonra kodlamaya geçebiliriz. C kodu olarak NetBeans proje dosyasını paylaşıyorum. Kodun içindeki bölümleri aşağıda açıklayacağım.
Proje Dosyası: RCcarcont
NetBeans ile proje nasıl oluşturulur ve derlenir önceki yazımı inceleyebilirsiniz. Tıklayın
Program İncelemesi:
- İlk olarak değişkenleri göreceksiniz. Buradaki pin numaralarını DQ hariç diğerlerini değiştirip kendi istediğiniz pinlere bağlayabilirsiniz.
//pinler
#define Motor1_1 0
#define Motor1_2 1
#define Motor2_1 2
#define Motor2_2 3
#define Motor1_E 4
#define Motor2_E 5
#define LedSag 21
#define LedSol 22
#define LedOnFar 23
#define LedArkaFar 24
#define LED1 25
#define TRIG 13
#define ECHO 12
#define Servo1 11
- Bağlayacağınız DS18B20 için ROM kodunu yazmalısınız bunun için önceki yazıma bakabilirsiniz. Tıklayın
char DStempfile[] = {“/sys/devices/w1_bus_master1/28-041502394cff/w1_slave”};
- main kısmı aşağıda gördüğünüz gibi wiringPi, GPIO, MultiThreading, ve servo initlerinden oluşmaktadır. Her aşamada çıktı olarak bize bilgi vermektedir. While döngüsüne herhangi bir kod yazılmadı çünkü işlemler MultiThreading ile yapılmaktadır.
int main(int argc, char** argv)
{
//init
printf(“\r\n——————————\r\n”);
printf(“RC CAR Uygulamasi DEMO test…\r\n”);
wiringPiSetup();
Gpio_init();
MultiThreading_init();
TCPserver_init();
ServoShow();
delay(50);
//main while
while(1)
{
//MultiThreading olduğu için main boş kalacak 🙂
delay(250);
}
return (EXIT_SUCCESS);
}
- TCP server thread i istenilen port da buffer dolumu kontrol eder dolu ise Gelen komutlar pars edilir ve gelen data çıktıya yazdırılır.
PI_THREAD (TCPserver)
{
while(1)
{
if((newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen))>=0)
{
n = read( newsockfd,buffer,sizeof(buffer));
buffer[n] = ‘\0’;
printf(“\r\nGelen Data:(%d) %s\r\n”,n,buffer);
…
…
…
- Mesafe ölçümü için de thread kullanıldı. HC-SR04 Ultrasonic sensör için önceki yazımı inceleyebilirsiniz. Tıklayın. Bu Thread de mesafe ölçümü yapıldıktan sonra define ile girilmiş min mesafe den küçük ise motorları durduruyor.
piLock (DIST_KEY) ;
FrontDist = getForntCM();
piUnlock (DIST_KEY) ;
if((FrontDist<=ForntMinDist) && (FrontDistAlert==0))
{
FrontDistAlert=1;
Motor_dur();
}
if(FrontDist>ForntMinDist)
{
FrontDistAlert=0;
}
- Program akışında bir sorun yada duraklama işlemini takip etmek için LEDFlash thread i açıldı.
PI_THREAD (LEDflash)
{
while(1)
{
LedToggle();
delay(250);
}
}
- DC ve Servo motor kontrolleri ise, istemciden yani android uygulamadan gelen değerlerin pars ederek istenilen işlemlerin yapılması ile olur
Artık NetBeans ile derleyip çalıştırabiliriz. Program detayı hakkında yorumlarınızı alabilirim.
Gelelim Android uygulamaya, RCcarcontrol (1.2.8)
Uygulamayı kurup çalıştırdığınızda şöyle bir ana ekran gelecektir.
Buradan Raspberry pi nin IP adresini yazıp Bağlantı Kur a basılır. (ilk önce pi den program derlenip çalıştırılır.) Daha sonra aşağıdaki kontrol ekranı gelecektir.
Artık Arabamızı görüntü eşliğinde kontrol edebiliriz. ileri, geri, sağ ve sol butonları basılı tuttuğunuzda ilgili komutu gönderir, bıraktığınızda ise durdur işlemini gönderir. Ön Far butonu ise bastıkça toggle yapar. İnfo ise size araç hakkında CPU ve DS 148B20 nin sıcaklığını, anlık ölçülen mesafeyi ve derlenen programın versiyonunu gösterir.
Programlar demo sürümü olduğu için üzerine eklemeler ve düzenlemeler yapılabilir. Eksik gördüğünüz kısımlar yada hatalar için geri bildirimlerinizi bekliyorum.
Soru yada görüşlerinizi bekliyorum. İyi Çalışmalar,
Bir sonraki uygulama yada projede görüşmek üzere…
zafer
8 Temmuz 2017 at 16:10
Selamlar. Ellerinze salık projeniz çok başarılı. Bşarılarınızın devamını dilerim. Bende şöyle birşey yapmıştım. https://github.com/zafersn/WiFi-RC-Controller-With-Camera raspberry pi üzerinde. Bu uygulamayı Raspberry Pi Zero W üzerinde de denemeyi istiyorum açıkcası. Eğer yapmak isteyen olursa proje android uygulamasını ücrestsiz vereceğim. Hatta geliştirmek isteyen olursa hertürlü yardımdada bulunurum. Ulaşmak isterseniz githup sayfasında iletişim bilgilerim mevcut.
iyi çalışmalar
Semih
9 Temmuz 2017 at 09:49
Merhaba uygulama üzerinde değişiklik için .aip dosyasını paylaşabilirmisiniz
Umut Kazanç
9 Temmuz 2017 at 17:15
https://drive.google.com/file/d/0B0SaWU4PFSoDUWwzTXRFVGxuQTA/view?usp=sharing
Umut Kazanç
25 Temmuz 2017 at 19:00
Video:
https://www.youtube.com/watch?v=3s8IMPQcp3w&t=2s
Hüseyin ÖZTÜRK
10 Ekim 2017 at 10:09
Başarılarınızın devamı dilerim. Roboturka ailesi.
sizlerden ricamız siemens plc ve scada hakkında aynı olarakta shneider scada hakkında bilgi vermenizi rica ediyoruz.
ilginiz ve alakanız için tşk ederiz.
Mahmut
6 Aralık 2017 at 20:42
Bu projenin toplam maliyeti ne kadar oldu
arif
10 Mart 2018 at 20:51
merhaba bende bu projeye başladım eimde raspberry pi zero w var fakat usb kablosuyla bilgisayara bağladığım zaman bağlantı bildirimi geliyor sonrasında cihaz sürücülerine bakıyorum yok yani raspberriye nasıl imaj atılıyor nasıl yazılım yükleniyor? 2 hafta içinde projeyi bitirmem gerekiyor yardımcı olursanız sevinirim iyi günler..
atakan
27 Temmuz 2018 at 16:12
Merhabalar ben bu projeyi telefonun wifi’si ile kontrol etmek istiyorum yardımcı olursanız sevinirim iyi çalışmalar.
Alişan
17 Nisan 2019 at 18:27
Merhabalar Umut Bey.Biz bu projenin bir benzerini yapmaktayız.Kamera olarak rev 1.3 kullanıyoruz.Sitede gösterdiğiniz gibi kamera ayarlarını yaptıktan sonra kameramızın ışığı yanmıyor görüntü alamıyoruz.Bu konuda yardımcı olur musunuz ?
Oguz
28 Nisan 2020 at 19:01
Merhabalar. peojenizi okulumda ödev olarak sundum. tüm parçaları birleştirdim fakat raspberry ye imaj atma ve kurulumn işlemini yapamadım. ilk başta yazdığınız motıon programını anlayamadım. bu konuda yardımcı olabilirmisiniz? teşekkürler