• خونه
  • تماس با ما
  • همکاری با ما
  • حمایت مالی
آزادی حجاز
  • News
  • AVR
    • AVR Train
      • آموزش جامع AVR
      • آموزش صحیح و خوانا نوشتن کد
    • تابلو روان
    • موتور
      • موتور DC
      • موتور پله ای
      • سرو موتور
    • سنسور و ماژول
      • RFID
      • التراسونیک
      • شتاب سنج
      • رطوبت سنج
      • دماسنج
      • بلوتوث
      • اتصال AVR به کامپیوتر
      • اتصال رم به AVR
      • فرستنده گیرنده رادیویی
      • ساعت و تاریخ
      • جوی استیک
    • IC
      • IC حافظه
      • ADC
      • DS1307(ساعت)
      • BCD TO 7S
      • شیفت ریجستر
    • LCD
      • LCD گرافیکی
      • LCD کاراکتری
      • LCD رنگی
    • LED – 7S – Dot Matrix
      • LED
      • سون سگمنت(۷S)
      • دات ماتریس
    • ساعت
    • پروگرامر
    • اسیلوسکوپ
    • ولتاژ،جریان،مقاومت،فرکانس،خازن و…
      • ولت متر
      • اهم متر
    • امواج
    • کی پد(KEY PAD)
    • فوتوسل
  • ARM
    • ARM Projects
    • ARM Train
      • AT91
      • STM32
      • LPC1768
      • LPC2368
  • Arduino
    • Arduino Train
    • Arduino Projects
  • Raspberry
  • FPGA
  • PCB
    • آلتیوم
      • آموزش آلتیوم
      • پروژه آلتیوم
  • S.W
    • Codevision
    • Proteus
    • Serial Port
    • Android
    • Labview
  • Analog
  • etc
    • Components
    • Android
    • C/C++/Qt
    • OpenCV
    • QuadCopter
    • PC And Micro
    • Communication Protocols
دلیل پیشرفت سریع آلمان و ژاپن
آموزش الکترونیک ۱ آموزش سینماتیک روبات ها آموزش آردوینو در Proteus
آموزش الکترونیک ۲ آموزش رباتیک و ربات های سری آموزش Proteus - تحلیل مدار
آموزش مبانی الکترونیک آموزش میکروکنترلر STM32F1xx آموزش آردوینو - کنترل با شبکه
برنامه نویسی Raspberry Pi آموزش AVR و Codevision - مقدماتی آموزش برنامه نویسی آردوینو با متلب
کاربرد Raspberry Pi در صنعت آموزش AVR و Codevision - تکمیلی آموزش برنامه نویسی آردوینو - رباتیک
● تبلیغات دیجیتال هوشمند● آموزش های رایگان● استخدام در فرادرس
شما اینجائید:خانه » الکترونیک » رزبری پای » پروژه لاجیک آنالایزر ساده با رزبری پای

پروژه لاجیک آنالایزر ساده با رزبری پای

ارسال شده توسط:محمدرضا اسلامی تاریخ ارسال: 2016/12/26 در رزبری پای 12 نظر

به نام خدا : پروژه لاجیک آنالایزر ساده با رزبری پای ، تو این مطلب از سری مطالب پروژه رزبری پای ، میخوایم یه لاجیک آنالایزر با هم بسازیم و ببینم اصلا چی هستش و….
پروژه لاجیک آنالایزر ساده با رزبری پای

لاجیک آنالایزر چیست

یه دستگاهیه که باهاش میشه زمان تغییرات سطح ولتاژ منطقی رو استخراج کرد؛ کاربرد این دستگاه، در مشاهده سیگنال پورت های ارتباطی ( سریال، i2c و spi و… ) هست.
 

کاربرد لاجیک آنالایزر

میشه ازش در زمینه مهندسی معکوس استفاده کرد، مثلا میشه با مشاهده سیگنال دستگاه دیاگ ماشین، پروتوکل ارتباطی ECU ماشین رو استخراج کرد؛ وقتی شما پروتکل ارتباطی رو داشته باشید، می تونید باهاش ارتباط برقرار کنید، مثلا سرعت، کیلومتر پیموده شده رو بخونید و احیانا اونا رو تغییر بدید!!!
 

پروژه لاجیک آنالایزر ساده با رزبری پای و ذخیره اطلاعات در اکسل

شماتیک پروژه رزبری پای : 
پروژه لاجیک آنالایزر ساده با رزبری پای
مسلم است که بعد از تست های اولیه، به جای کلید از منبع پالس استفاده می شود!! LED هم برای تشخیص سطح ولتاژ یک، قرار داده شده است.
 
کد پروژه : ابتدا یه برنامه می نویسیم که زمان تغییر و استقرار سطوح منطقی پالس رو در یه فایل اکسل ذخیره کنه :

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
//g++ -o lat lat.cpp -lwiringPi
#include <wiringPi.h>
#include <iostream>
#include <fstream>
#include "vector"
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
using namespace std;
vector<long> a;
int i=0;
double p=0;
void interrupt(void)
{
   a.push_back(micros());
   i++;
}
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(void)
{
   wiringPiSetup();
   pinMode(7,INPUT);
   pullUpDnControl(7,PUD_DOWN);
   wiringPiISR(7,INT_EDGE_BOTH,&interrupt);
   while(!kbhit())
   {
     ofstream la("logictime.xls");
     for(int i=1;i<a.size();i++)
     {
la << a[i]-a[i-1]<<'\t';
     }
   }
//la.close();
return 0;
}

نتیجه کد بالا، یک فایل اکسل با محتوای زمان پالس ها است ( بر حسب میکرو ثانیه ) :
ذخیره اطلاعات در اکسل در رزبری پای
که خانه های فرد، مربوط به زمان سطح منطقی یک و خانه های زوج، مربوط به زمان سطح منطقی صفر را نشان می دهد.
 

در حال نزدیک شدن به یوم الله 9 دی می باشیم؛ برخی از افراد جامعه، استراتژی مقابله مردم در مقابل مردم را ناجوانمردانه و عامل تفرقه می دانند و رویارویی یک گروه از جامعه در مقابل گروهی دیگر، برای حفاظت از حاکمیت را غیر اخلاقی می دانند. ( مثل دکتر علی مطهری )
در این باب، نامه ای از نهج البلاغه، می تواند راه گشای حق طلبان باشد.

نامه 29 نهج البلاغه که خطاب به مردم بصره نوشته شده است :

پس از هجوم عمرو عاص به مصـر و کشـته شدن محمد بن ابی بکر، مخالفان امام علی(ع) در بصره نیز به فکر شورش افتادند، صّحار بن عباس عبدي نامه اي به معاویه نوشت و از او خواست مردي را به بصـره بفرسـتد تا مخالفان را سازماندهی کند، معاویه خوشحال شد و ابن حضـرمی را فرسـتاد که تحرکاتی پدید آمد، و سـران و بزرگان قبائل رو در روي هم قرار گرفتند، وقتی به امام درکوفه اطّلاع دادند، آن حضـرت این نامه را خطاب به مردم بصره نوشتند :
شما از پیمان شکسـتن، و دشـمنی آشـکارا با من آگاهید. با این همه جرم شما را عفوکردم، و شمشیر از فراریان برداشتم، و استقبال کنندگان را پذیرفتم، و از گناه شـما چشم پوشیدم، اگر هم اکنون کارهاي ناروا، و اندیشه هاي نابخردانه، شـما را به مخالفت و دشمنی با من بکشاند، سپاه من آماده، و پا در رکابند. و اگر مرا به حرکت دوباره مجبور کنیـد، حمله اي برشـما روا دارم که جنگ جمل در برابر آن بسـیار کوچک باشد، با اینکه به ارزشهاي فرمانبردارانتان آگاهم، و حق نصـیحت کنندگان شـما را می شـناسم، و هرگز به جاي شخص مّتهمی، انسان نیکوکاري را نخواهم گرفت، و هرگز پیمان وفاداران را نخواهم شکست.
سرانجام پس از این نامه امام(ع) به مردم بصره، طرفداران آن حضرت، ابن حضرمی را شکست داده و او را کشتند. و فتنه را خاموش کردند.
منبع : نهج البلاغه نامه 29 و الغارات جلد 2 صفحه 373

 
در بخش بعدی، این تغییرات سطح ولتاژ رو به صورت گرافیکی نشان می دهیم.
طبق معمول چند موضوع آخر، برای انجام این پروژه، نیاز به نصب کتابخانه opencv روی رزبری دارید.
برای نصبش، به لینک زیر مراجعه فرمایید : نیازمندی های رزبری پای
جهت آشنایی با نحوه کار با پایه های ورودی و خروجی رزبری، به لینک زیر مراجعه فرمایید :
آموزش و پروژه gpio رزبری پای به زبان c
 

پروژه لاجیک آنالایزر ساده با رزبری پای و نمایش ساده و نموداری منطق 0 و 1

ابتدا یه برنامه ساده برای رسم تغییر سیگنال تولیدی توسط یک کلید فشاری می نویسیم؛ یه فایل 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
//g++ la.cpp -o la $(pkg-config --libs opencv) -l wiringPi
#include <wiringPi.h>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "iostream"
#include "stdio.h"
using namespace std;
using namespace cv;
volatile int i=0;
Mat img = Mat::ones(512,512,CV_32FC1);
void interrupt(void)
{
   i++;
   img = Mat::ones(512,512,CV_32FC1);
   if(i%2==1)
    line(img,Point(10,400),Point(400,400),Scalar(0,0,0));
   else
    line(img,Point(10,20),Point(400,20),Scalar(0,0,0));
}
void zero(cv::Mat img)
{
   line(img,Point(10,400),Point(400,400),Scalar(0,0,0));
   imshow("signal",img);
   waitKey(1);
   img = Mat::ones(512,512,CV_32FC1);
}
void one(cv::Mat img)
{
   line(img,Point(10,20),Point(400,20),Scalar(0,0,0));
   imshow("signal",img);
   waitKey(1);
   img = Mat::ones(512,512,CV_32FC1);
}
Mat image,gray;
int main(void)
{
   wiringPiSetup();
   pinMode(7,INPUT);
   pullUpDnControl(7,PUD_DOWN);
   wiringPiISR(7,INT_EDGE_BOTH,&interrupt);
   while(waitKey(100)<3)
   {
      printf("%d\n",i);
      imshow("signal",img);
   }
destroyWindow("signal");
return 0;
}

برنامه بالا، پس از هر بار تغییر وضعیت کلید ( لبه بالا رونده و پایین رونده )، تابع مربوط به روال وقفه خارجی فراخوانی میشه که در اون، به متغیر i یک واحد اضافه میشه و بنا بر وضعیت موجود، خط صفر یا یک رو در ماتریس img رسم می کنه.
و در حلقه اصلی برنامه هم، مقدار i و همچنین تصویر موجود در ماتریس img رو نمایش میده.
نتیجه رو در ویدئو زیر مشاهده فرمایید
http://www.aparat.com/v/KUJmo

عوض شدن احتمالی جای صفر یک، به علت لرزش کلید فشاریست.
 

پروژه لاجیک آنالایزر ساده با رزبری پای و نمایش نموداری اطلاعات

برنامه زیر هم کامل شده برنامه بالاست برای رسم شکل پالس های اعمالی به پایه مذکور است :

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
//g++ la2.cpp -o la2 $(pkg-config --libs opencv) -l wiringPi
#include <wiringPi.h>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "iostream"
#include "stdio.h"
#include "vector"
using namespace std;
using namespace cv;
vector<long> a;
int i=0;
Mat img = Mat::ones(512,512,CV_32FC1);
double p=0;
void interrupt(void)
{
   img = Mat::ones(512,512,CV_32FC1);
   a.push_back(micros());
   i++;
   p = 512.0/(a[(a.size()-1)] - a[0]);
   Point a1 = Point(0,100);
   Point a2;
   for(int t=0;t<a.size();t++)
   {
      if(t%2==0)
      {
a2.x=a1.x+15;
a2.y=100;
        line(img,a1,a2,Scalar(0,0,0));
        line(img,Point(a1.x,400),a1,Scalar(0,0,0));
        a1=a2;
        a1.y=400;
      }
      else
      {
        a2.x=a1.x+15;
a2.y=400;
        line(img,a1,a2,Scalar(0,0,0));
line(img,Point(a1.x,100),a1,Scalar(0,0,0));
        a1=a2;
        a1.y=100;
      }
   }
}
Mat image,gray;
int main(void)
{
   wiringPiSetup();
   pinMode(7,INPUT);
   pullUpDnControl(7,PUD_DOWN);
   wiringPiISR(7,INT_EDGE_BOTH,&interrupt);
   while(waitKey(100)<3)
   {
      for(int j=0;j<a.size();j++)
      {
cout<<"a[j+1] : "<<a[j+1]<<endl;
        cout<<"512/a[end]-a[0] :"<<512.0/(a[a.size()-1]-a[0])<<endl;
      }
      printf("%d\n",i);
      imshow("signal",img);
   }
destroyWindow("signal");
return 0;
}

نتیجه کد بالا رو در ویدئو زیر مشاهده می فرمایید :
http://www.aparat.com/v/wksc0

پیشنهادات :

  • احتمالا دریافتید که زمان پالس ها با شکل خروجی متناسب نیست؛ برای حل این مشکل، کافیه که ضریبی از متغیر p رو در اسکیل شکل خروجی دخیل کنید، و برای تعداد پالس های زیاد، اندازه ماتریس img رو بزرگتر کنید.
  • بهتر است تا صفحه را درجه  درجه بندی کنید ( grid )
  • با اضافه کردن یک مبدل آنالوگ به دیجیتال، می توانید یک اسیلوسکوپ جمع و جور درست کنید!!!

 
جهت هر چه مستحکم تر شدن مقام ولایت فقیه و تعجیل درظهور بابای خوبمون مهدی(عج) صلوات
 
آیت الله جوادی آملی : بانک های ربوی باید تحریم شوند.
http://www.aparat.com/v/WD5ZI

گروه پرسش و پاسخ الکترونیکی سروش

درباره محمدرضا اسلامی

مطالب مرتبط

  • » ماشین کنترلی دوربین دار با رزبری پای

  • » تشخیص خواب آلودگی-پروژه رزبری پای با dlib library

  • » آموزش ساخت کوادکوپتر با رزبری پای قسمت 3

  • » آموزش ساخت کوادکوپتر با رزبری پای قسمت 2

  • » آموزش ساخت کوادکوپتر با رزبری پای قسمت 1

  • » پروژه رزبری حکاکی لیزری روی چوب قسمت 2

  • » پروژه رزبری حکاکی لیزری روی چوب قسمت ۱

  • » بازشناسی چهره انسان با رزبری پای face recognition_قسمت سوم

  • » بازشناسی چهره انسان با رزبری پای face recognition_قسمت دوم

  • » بازشناسی چهره انسان با رزبری پای face recognition_قسمت اول

12 نظر

  1. میثم
    2016/12/26 در 16:25

    سلام
    میشه باهاش ecu ماشین رو کنترل کرد؟ اگه میشه یه توضیحی بفرمایید
    mpars590@yahoo.com
    علی یارتون

    پاسخ
    • محمدرضا اسلامی
      2016/12/26 در 19:02

      با سلام
      با این فقط می تونید پروتوکل ارتباطی با ecu رو استخراج کنید.
      اگر این پروتوکل رو به دست بیارید،می تونید زبون اتوموبیلتون رو بفهمید.
      مثلا با استخراج کد های دستگاه دیاگ،می شه یه دستگاه دیاگ ارزون قیمت تهیه کرد.
      ولی منظورتون از کنترل ecu رو متوجه نشدم.

      پاسخ
    • میثم
      2016/12/26 در 22:55

      منظورم اینه گاز و میزان ترزیق سوخت رو کنترل کنم و دستی کم و زیادش کنم

      پاسخ
      • محمدرضا اسلامی
        2016/12/26 در 23:38

        بله .امگان تنظیم گاز با ای سیو هست (کامنت هاش تو اینترنت نیست)
        ولی می شه دور موتور رو خوند و با یه موتور که به سیم گاز وصله،دور موتور رو کم و زیاد کرد.
        در مورد تنظیم سوخت هم اگر با دستگاه دیاگ امکان تنظیم سوخت وجود داره،پس میشه این کار رو کرد.(از تعمیر کارها بپرسید)
        ولی با این پروژه،امکان خواندن اطلاعات وجود ندارد تنها می شود پرو توکل ارتباطی رو استخراج کرد.!!!

        پاسخ
  2. علیرضا بیطاری
    2017/01/04 در 00:34

    سلام. اول از همه از سایت بسیار خوبتون خیلی سپاسگزارم.
    همچنین یه سوال هم داشتم. فرض کنید ما یک پروژه درست کردیم که یه برنامه با محیط گرافیکی (GUI) داره. حالا میخوام یه جورایی رزبین رو قفل بکنیم. منظورم اینه که Deploy کنیم. یعنی طوری بشه که دیگه نشه بهش کیبورد و موس وصل کرد و یا به قسمت های مختلف سیستم عامل دسترسی داشت. فقط همون GUI اختصاصی که خودمون درست کردیم هنگام Boot بیاد بالا. میخواستم بدونم همچین کاری امکان پذیر هست و اگر هست چطور ؟
    خیلی ممنونم.
    موفق باشید.

    پاسخ
    • محمدرضا اسلامی
      2017/01/06 در 13:23

      اجرای یک برنامه به صورت اتوماتیک امکان پذیره ولی قفل کردن رو تا چند روز آینده امکان تست ندارم که جواب بدم.

      پاسخ
  3. رضا
    2017/03/04 در 20:21

    سلام خدمت جناب مهندس من تا حالا با زبان cرو میکرو کنترلر avrکار میکردم حالامیخوام با رزبری پروژه هامو انجام بدم زبان cواسه رزبری چه جوری به همه امکانات دسترسی هست؟

    پاسخ
    • محمدرضا اسلامی
      2017/03/06 در 11:33

      سلام
      بنده مهندس نیستم،معمولیم…
      بله با زبان c و c++ به خوبی قابل استفاده هست.

      پاسخ
  4. صادق
    2017/08/08 در 19:46

    با سلام و عرض ادب
    ممنون بابت آموزش آیا این اندازی های که داخل اکسل ذخیره میشه دقیق هستش میشه بهش اطمینان کرد یا خیر!
    ممنون میشم جواب رو به ایمیل من ارسال کنید با تشکر

    پاسخ
    • محمدرضا اسلامی
      2017/08/08 در 20:29

      سلام
      متاسفانه لاجیک آنالایزر ندارم تا مقایسه کنم.
      ولی روی کاغذ، تا فرکانس ۱۰۰ کیلو هرتز،با دقت خوبی اندازه گیری می کنه.

      پاسخ
  5. کوثر
    2018/03/06 در 20:11

    سلام یه پروژه با برنامه avrمیخواستم کسی داره
    یا یه راهنمایی کنه؟؟

    پاسخ
    • محمدرضا اسلامی
      2018/03/06 در 23:52

      سلام پروژه نداریم!!!ولی اگر کمکی از دستمون بربیاد،دریغ نمی کنیم.
      لینک گروه در سروش:
      گروه الکترونیک در سروش

      پاسخ

یک نظر بدهید

برای صرف‌نظر کردن از پاسخ‌گویی اینجا را کلیک کنید.

آزادی قدس نزدیک است، ان شاء الله

آزادی قدس نزدیک است، ان شاء الله

مطلب ( پروژه ) بعدی …

فعلا دارم رو USB و میکرو LPC کار میکنم، 3 تا موضوع مطرح هستش ( که تو ذهنمه هر3شو برم ) :

1) میکرو در نقش Device ( فعلا محوریت کار من این مورد هستش )
2) میکرو در نقش Host
3) میکرو در نقش OTG

 

و باز 2 تا موضوع مطرح هستش، برا راه اندازی usb دو تا راه داریم ( که تو ذهنمه هر2شو برم ) :

1) استفاده از میکروکنترلر ( فعلا محوریت کار من این مورد هستش که از LPC1768 استفاده میکنم )
2) استفاده از آیسی های مختص اینکار.

 

فعلا کارم با دیتاشیت usb تموم شده، دارم کلاس های usb رو مطالعه میکنم، کلاس cdc رو ماستمالی کردیم و یه پروژه ازش منتشر کردیم، الان رو کلاس HID ریز شدم و دارم مطالعه میکنمش و پروژه ازش میزارم تو سایت.

 

جزئیات داستان رو در لینک زیر میتویند ببینید :

آموزش جامع پروتکول USB

 

===

 

به علت اثطغبال بیش از حد دوستان از موضوع usb؛ فعلا یکم سرگرم طراحی قالب جدید سایت شدم ^_^

نظرات اخیر

  • مهدی دمیرچیلو : سلام مدار 1 : سنسور + میکرو + بلوتوث : این میکرو دیتای سنسور رو میخ ...

  • مهدی دمیرچیلو : سلام - این دو دو میکرو جدا هستند - دلیلی نداره که کد های یکی تو اون ...

  • shiva : سلام، وقتتون بخیر مرسی بابت مطالب خوبتون. من می خوام اطلاعت یه سنسو ...

  • حسین : سلام. من یه میکرو ARM LPC1549 دارم. کدهای LPC15xx که گیر نمیاد. کده ...

  • مهدی دمیرچیلو : سلام - تنها فرقی که تو دیتاشیت ds1307 بین این دو دیدم فقط این بود ک ...

جستجو

bigtheme
  1. پسورد فایل های سایت

    پسورد تمام فایل های سایت الکترونیک

  2. کانال ما در آپارات


ارائه دادن پروژه های سایت به استاد و یا فروختنشون مورد رضایت ما نیست و خلاف شرع و قانون می باشد / کپی کردن مطالب سایت ممنوعه /
  توسط بیگ تم