به نام خدای علی(ع) آفرین : تو این مطلب از سری مطالب آموزش رزبری پای قصد داریم به آموزش راه اندازی دوربین ov5647 در raspebry pi بپردازیم و باهاش یه پروژه کوچولو ببندیم.
آموزش راه اندازی دوربین ov5647 در raspebry pi
مشخصات دوربین ov5647
500 million pixels
OV5647 sensor chip
CCD Size: 1/4 inch
Aperture (F): 2.8
Focal length (Focal Length): 3.37mm
Viewing angle (Diagonal): 72.4 degrees
Best sensor pixels: 1080p
Still picture resolution of 2592 x 1944
Support 1080p30, 720p60 and 640x480p60 / 90 video
Size: 25mm × 24mm × 9mm
این سری دارای یک ورژن بدون فیلتر IR هست که قابلیت عکس برداری و فیلم برداری در شب رو داره. که به سری noir معروفه. هم اکنون مدل 8 مگاپیکسلی این دوربین هم در بازار موجود است.
نحوه اتصال دوربین به رزبری پای
توجه : هنگام اتصال دوربین، کابل دوربین رو اشتباهی به خروجی تصویر وصل نکنید. احتمال آسیب دیدنش هست. (بنده یه بار اشتباه وصل کردم شانس آووردم فقط سیستم عامل رسپین پرید و دوربین هیچیش نشد.) ولی نمیدونم پورت DSI سالمه یا نه.
نحوه اتصال دوربین به رزبری پای مطابق شکل زیر است :
http://www.aparat.com/v/0GIdo
خب پس از اتصال دوربین به رزبری پای، تغذیه رو وصل کنید تا رسپین لود بشه.بعدش مطابق ویدئو زیر، دوربین رو فعال کنید و کتابخونه کار با ماژول رو دانلود و نصب کنید. انتهای ویدئو هم یه تست از دوربین گرفته میشه.
کد هایی که تو ویدئو بالا استفاده شده رو در زیر قرار میدم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
http://www.uco.es/investiga/grupos/ava/node/40 https://sourceforge.net/projects/raspicam/files/ **** cd /home/pi/Downloads/ unzip raspicam-0.1.1.zip cd raspicam-0.1.1 mkdir build cd build cmake .. make sudo make install sudo ldconfig **** cd mkdir camera cd camera sudo nano simpletest_raspicam.cpp **** #include <unistd.h> #include <ctime> #include <fstream> #include <iostream> #include <raspicam/raspicam.h> using namespace std; int main ( int argc,char **argv ) { raspicam::RaspiCam Camera; //Cmaera object //Open camera cout<<"Opening Camera..."<<endl; if ( !Camera.open()) {cerr<<"Error opening camera"<<endl;return -1;} //wait a while until camera stabilizes cout<<"Sleeping for 3 secs"<<endl; sleep(3); //capture Camera.grab(); //allocate memory unsigned char *data=new unsigned char[ Camera.getImageTypeSize ( raspicam::RASPICAM_FORMAT_RGB )]; //extract the image in rgb format Camera.retrieve ( data,raspicam::RASPICAM_FORMAT_RGB );//get camera image //save std::ofstream outFile ( "raspicam_image.jpg",std::ios::binary ); outFile<<"P6\n"<<Camera.getWidth() <<" "<<Camera.getHeight() <<" 255\n"; outFile.write ( ( char* ) data, Camera.getImageTypeSize ( raspicam::RASPICAM_FORMAT_RGB ) ); cout<<"Image saved at raspicam_image.jpg"<<endl; //free resrources delete data; return 0; } **** Ctrl+x>>y>>Enter **** sudo nano CMakeLists.txt **** cmake_minimum_required (VERSION 2.8) SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} /usr/local/lib/cmake/) project (raspicam_test) find_package(raspicam REQUIRED) add_executable (simpletest_raspicam simpletest_raspicam.cpp) target_link_libraries (simpletest_raspicam ${raspicam_LIBS}) **** Ctrl+x>>y>>Enter **** mkdir build cd build cmake .. make **** ./simpletest_raspicam **** جهت هر چه مستحکمتر شدن مقام ولایت فقیه و تعجیل در ظهور بابای خوبمون مهدی(عج) صلوات **** |
پروژه رزبری پای دوربین و ماژول تشخیص حرکت
خب حالا می خوایم یه پروژه با استفاده از دوربین و ماژول تشخیص حرکت PIR انجام بدیم. به این صورت که دو تا سنسور تشخیص حرکت داشته باشیم و هر کدوم از این سنسور ها که حرکتی رو تشخیص داد، دوربین که به یه سروو موتور وصله بچرخه و از ناحیه مورد نظر یه عکس بگیره.
جهت آشنایی با سنسور تشخیص حرکت، به لینک زیر مراجعه کنید : پروژه رسپری آموزش وقفه های خارجی raspberry pi
مدار زیر رو ببندبد :
خب یه پوشه برای این پروژه می سازیم و اونو باز می کنیم.(با اجرای دو دستور زیر در ترمینال)
1 2 |
mkdir camex cd camex |
یه فایل با پسوند .cpp می سازیم :
1 |
sudo nano cam_servo_pir.cpp |
و کد زیر رو در اون می نویسیم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
#include <ctime> #include <fstream> #include <iostream> #include <wiringPi.h> #include <raspicam/raspicam.h> #include <stdio.h> #include <termios.h> #include <unistd.h> #include <fcntl.h> using namespace std; int i=1; char name[20]={0}; int kbhit(void) { struct termios oldt, newt; int ch; int oldf; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); oldf = fcntl(STDIN_FILENO, F_GETFL, 0); fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); ch = getchar(); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); fcntl(STDIN_FILENO, F_SETFL, oldf); if(ch != EOF) { ungetc(ch, stdin); return 1; } return 0; } int main ( int argc,char **argv ) { wiringPiSetup(); pinMode(1,PWM_OUTPUT); pinMode(28,INPUT); pinMode(29,INPUT); pullUpDnControl(28,PUD_DOWN); pullUpDnControl(29,PUD_DOWN); pwmSetMode(PWM_MODE_MS); raspicam::RaspiCam Camera; cout<<"Opening Camera..."<<endl; if ( !Camera.open()) {cerr<<"Error opening camera"<<endl;return -1;} unsigned char *data=new unsigned char[ Camera.getImageTypeSize ( raspicam::RASPICAM_FORMAT_RGB )]; pwmSetClock(384); pwmSetRange(1000); while(!kbhit()){ if(digitalRead(28)){ pwmWrite(1,35); cout<<"Sleeping for 3 secs"<<endl; sleep(3); Camera.grab(); Camera.retrieve ( data,raspicam::RASPICAM_FORMAT_RGB ); sprintf(name,"%u.jpg",i); std::ofstream outFile (name,std::ios::binary ); outFile<<"P6\n"<<Camera.getWidth() <<" "<<Camera.getHeight() <<" 255\n"; outFile.write ( ( char* ) data, Camera.getImageTypeSize (raspicam::RASPICAM_FORMAT_RGB ) ); cout<<"Image saved at "<<i<<".jpg"<<endl; i++; } if(digitalRead(29)){ pwmWrite(1,115); cout<<"Sleeping for 3 secs"<<endl; sleep(3); Camera.grab(); Camera.retrieve ( data,raspicam::RASPICAM_FORMAT_RGB ); sprintf(name,"%u.jpg",i); std::ofstream outFile (name,std::ios::binary ); outFile<<"P6\n"<<Camera.getWidth() <<" "<<Camera.getHeight() <<" 255\n"; outFile.write ( ( char* ) data, Camera.getImageTypeSize ( raspicam::RASPICAM_FORMAT_RGB ) ); cout<<"Image saved at "<<i<<".jpg"<<endl; i++; } } delete data; return 0; } |
کد رو ذخیره کنید(Ctrl+x بعدش y و بعدش اینتر
تشریح توابع به کار رفته در برنامه در ویدئوی زیر :
حالا باید کد رو کامپایل کنیم.(ما از ابزار ++g استفاده میکنیم)
1 |
g++ -o cam_servo_pir cam_servo_pir.cpp -l wiringPi -l raspicam |
بعدش هم اجراش می کنیم :
1 |
sudo ./cam_servo_pir |
خروجی کار رو در ویدئو زیر مشاهده می کنید : http://www.aparat.com/v/6EDwy
جهت هر چه مستحکم تر شدن جایگاه ولایت فقیه و تعجیل در ظهور بابای خوبمون مهدی (عج) صلوات
مهمان
اینارو میشه بگی با چه زبان برنامه نویسی نوشتیش
نویسنده این مطلب
سلام.
زبان ++c
مهمان
سلام
ایا میشه این ماژول ov5647 رو به میکرو arm متصل کرد؟
اگه نمیشه چرا؟
اگه میشه چجوری؟
مهمان
سلام
تا حالا با دوربین ov7670 و آردوینو کار کردین؟
من این دوربین و برد آردوینو مگا دارم و تونستم ازش خروجی بگیرم
ولی همه ی تصاویرم برفکیه و اصلا چیزی مشخص نیست
میتونید کمکم کنید؟
مهمان
سلام، ممنون
مهمان
سلام من یه سوال دارم البته به موضوع ربطی نداره.
من یه فرستنده گیرنده دوربین دارم و میخوام به عنوان دوربین مدار بسته استفاده کنم ازش ولی هر کسی که گیرنده ۵.۸ داشته باشه میتونه تصویر رو داشته باشه میشه کاری کرد که این فرستنده گیرنده به یک سیستم امن تبدیل بشن و با کد یا چیزی همدیگرو بشناسن یا اینکه یه فایروال براشون تهیه کنم
ممنون میشم راهنمایی کنید
نویسنده این مطلب
سلام.
فرستنده و گیرنده تون قابل برنامه ریزیه؟آپدیت چطور؟
ورودی ش قابل دسترسه؟
مثلا ورودی spi،i2c و … داره یا کابل دوربین مستقیم بهش میخوره؟
خروجی چجوریه؟avو…
مهمان
یکی از دوستام برام ساخته با ای وی ار ساختتش و فکر کنم اوپن سورس باشه.
دوربین مستقیما بش وصل میشه و خوروجی گیرنده هم ای وی هست و با تبدیل به کامپیوتر وصل میشه یا مستقیما به تلوزیون وصل میشن . میشه کمی در مورد نوشتن برنامش توضیح بدید تا اگر بتونم بنویسمش یا بدم همین دوستم درستش کنه
مهمان
آقا سلام خسته نباشید
مرسی از آموزش ولی من تو قسمت دستور cmake.. ارور میده بهم !!!
اون پکیجی که آقا نوید گفتن ر هم نصب کردم ولی فایده نداشت بازم ارور میده … چه کار کنم ؟؟؟ شما رو به خدا یه راهنمایی بکنین خیلی لازم دارم !
نویسنده این مطلب
سلام
لطفا از ترمینالتون بعد از وارد کردن دستور یه عکس بگیرید و آپلود کنید
مهمان
یه دوربین دارم که درست کار میکرد ولی یه بار که روشنش کردم دیگه کار نمیکرد و مینوشت no data recieved from sensor . میدونید مشکلش چیه ؟
نویسنده این مطلب
سلام
کابلش رو بررسی کنید تا سالم باشه و درست وصل شده باشه.
امتحان کنید که وقتی دوربین وصل نیست هم همین خطا رو میده؟
مهمان
نه وقتی دوربین وصل نیست یه ارور دیگه میده :/
نویسنده این مطلب
تو کانفیگ رزبری،دوربین رو فعال کردید؟
با پایتون و c امتحان کردید؟
وقتی برنامه رو اجرا می کنید،دوربین داغ نمیکنه؟
مهمان
دقیقا منم الان همینطوری شدم نمیدونم چیو نصب کردم که مشکل حل شده دوروزه که فقط دارم پکیچ نصب میکنم
ولی میدونم چه پکیجایی نصب کردم اما نمیدونم کدومش مشکلو حل کرده
,ولی خب من به دوستان پیشنهاد میکنم اول برن opencv رو نصب کنن بعد بیان رو دوربین من حسم بر اینه که با اجرای چندخط کد اول تو نصب opencv مشکلم حل شد
جدا از همه اینا برا دانلود کتابخونه opencv چرا این فیلتره من تعجب میکنم میگه درمکان شما در دسترس نیست به خاطر تحریمه
اقای اسلامی کاش راهی بود از فایل زیپ سیستم عامل شما که اینچیزا روش نصب شده یه ایمیج میگیرفتیم میزاشتیم ولی خب حجمش خییییلی زیاد میشه حالا من شاید اینکارو کردم یه روز که دوستان اذیت نشن
نویسنده این مطلب
متاسفانه مموریم ۱۶ گیگه و پشتیبانش هم ۱۶ گیگ میشه!
مهمان
همون چند خط اول دقیقا فایل زیپ دانلود شد اکسترکت شد پوشه بیلد ساخته شد ولی همین که کامند ( .. cmake) (همون اول کار) وارد میکنم میگه کامند نات فوند ->فیلمو تا ته دیدم شما گفتید قبلا opencv رو نصب کردید منم دو روزه هر چی بود رو نصب کردم اما الان که دارم این نظرو میدم موفق شدم عکس هم بادوربین گرفتم منتها میخوام بدونم مشکل از چی بود کدوم پکیج باید نصب میشد که کامند cmake.. کار کنه
من خودم حدس میزنم که باید این پکیج زیر نصب میشد نظر شما چیه ؟
sudo apt-get install python-numpy python-scipy python-matplotlib python-pandas python-nose
شما تو فیلمی که ظبط کردید همین که کامند .. cmake وارد کردید ترمینال بهتون گفت :
The C compiler identification is GNU 4.9.2
در صورتی که من میگفت کامند نات فوند
بعد من اومدم کدبلاک رو هم نصب کردم پروژه به زبان سی هم برا gpio کامپایل کردم اوکی بود اما بعده اینا باز هم مشکل برطرف نشد.
دیگه این اخریا نمیدونم چیارو نصب کردم که مشکل حل شد و ترمینال به منم گفت
The C compiler identification is GNU 4.9.2
که تهش موفق شدم اما دوس دارم بدونم مشکل از کجا بود…
مرسی
نویسنده این مطلب
احتمالا cmake نصب نبوده!!
مشکل این مطالبی که گذاشتم،اینه که چون بنده از اول اول شروع کردم،و برای هر مطلب،یه سری بسته نرم افزاری و کتابخونه و … نصب کردم(که بعضیاش مشکلاتم رو حل می کرد و بعضیاش هم الکی نصب میشد)در پروژه های بعدی،از همون نصب شده های قبلی استفاده میشد.ولی اگر کسی بخواد از وسط،یکی از مطالب رو دنبال کنه،به مشکلات مشابه بر میخوره،اگر یادتون اومد که چی رو نصب کردید که درست شد،لطفا پیام بدید تا بقیه دوستان،از تجربیاتتون استفاده کنن
مهمان
سلام
اقای اسلامی چرا وقتی من کد .. cmake رو میزنم میگه کامند نات فاند،دقیقا مراحل طبق فیلم رفتم مگه چه پیشنازی داره تا نصب کنم ؟
نویسنده این مطلب
سلام تا خط چندم کد پیش رفتید؟
یه عکس از ترمینالتون،بعد از اجرای کد قرار بدید
مهمان
سلام با تشکر از زحمتتون
فقط ببخشید کد پایتون دوربین هم میتوانید قرار دهید؟
نویسنده این مطلب
سلام کد پایتون رو سرچ کنید هست تو وب
متاسفانه وقت نمیکنم بذارم.
مهمان
سلام ممنون بابت زحمتاتون
ببخشید یه چنتا سوال داشتم کدهاتون رو تو چ کامپایلری مینویسین؟
رو خود رزبری کدا رو مینویسین؟ (باید حتما کیبورد و مانیتور به رزبری وصل شه؟) یا اینکه رو کامپیوتر مینویسین بعد انتقالش میدین؟
نویسنده این مطلب
سلام در خود ترمینال، یه فایل متنی با فرمت cpp می سازم و کد ها رو دراون می نویسم و ذخیره اس میکنم.
تا اینجا یه فایل هاوی کد دارم.بعش اونو با ابزار ++g یا cmake کامپایل می کنم.این ابزار،فایل متنی رو کامپایل و
بیلد می کنه و یه فایل اجرایی می سازه که کد رو با اون اجرا می کنم.البته نرم افزار های گرافیکی هم موجوده
مثل codeblocks و geany و…
اگر ویدئو موجود در آموزش رو مشاهده کنید، متوجه مراحل می شوید و یا به لینک زیر مراجعه فرمایید
برنامه نویسی به زبان ++c
کد ها رو در خود رسپبری می نویسم ولی با استفاده از کامپیوتر و تکنیک vnc و یا remote desktop computer
می تونید انواع راه های موجود برای ارتباط با رسپبری پای رو در لینک های زیر ببینید.
روش های کنترل رسپبری پای_VNC
سایر راه های کنترل رسپبری پای
کنترل رسپبری پای از راه دور_اینترنت
مهمان
سلام ممنون بابت اموزش مفید بود یه سوالی داشتم اسم این برنامه توش کد هایی که توی سایت میزارین چیست منظورم توی چه ووردی مینویسین کامپایلر رو نمیگم.
مدیر سایت
سلام-افزونه هستش – افزونه وردپرس-تو گوگل بزنید انواع مختلقش رو میاره – هر کدومو که دوست داشتی انتخاب کن.
ما از افزونه crayon استفاده میکنیم.
مهمان
بی نظیر بود مهندس اجرت با امام زمان