فهرست مطالب
ماژول جوی استیک
موقعیت X و Y جوی استیک را می توان به عنوان یک ولتاژ آنالوگ در پین خروجی اندازه گیری کرد. در این جوی استیک ، محور x و محور y مقدار پتانسیلومتر خاص خود را دارند. بنابراین با هم، یک جداکننده ولتاژ مانند نمونه موجود در تصویر زیر می سازند.
در حالت غیرفعال ، پتانسیلومتر در وسط قرار دارد به طوری که مقاومت 1 = مقاومت 2 است و ولتاژ به طور مساوی بین هر دو مقاومت تقسیم می شود. اگر یکی از محورها مانند مثلاً محور x تغییر کند ، مقادیر مقاومت ها تغییر می کنند – به عنوان مثال مقدار مقاومت 1 از مقدار مقاومت 2 بالا می رود و مقدار مقاومت 1 سقوط می کند و مقدار مقاومت 2 افزایش می یابد. با توجه به تقسیم مقاومتی، می توانید مقدار ولتاژ دو سر هر مقاومت را اندازه گیری کرده و موقعیت محورها را بیابید.
از این ماژول برای کنترل طیف گسترده ای از پروژه ها از وسایل نقلیه RC گرفته تا LED های رنگی استفاده می شود.
مشخصات فنی ماژول جوی استیک دو محوره
ماژول جوی استیک KY-023 از دو پتانسیومتر 10k دو محوره عمود بر هم تشکیل شده است تا بتواند محور X و Y را با تغییر مقاومت در هنگام جابجایی کنترل کند. هنگامی که جوی استیک به محور Z فشار داده می شود ، شستی فعال می شود.
مشخصات در جدول زیر امده است :
پایه های ماژول جوی استیک
اتصال پایه های ماژول در برد Arduino و Raspberry Pi در جدول های زیر آورده شده است:
نمودار اتصالات
پایه های مختلف ماژول را مطابق جدول بالا و به صورت آنچه در تصویر زیر مشاهده میشود به برد آردوینو متصل کنید.
کدهای آردوینو
کد زیر مقدار را در پین های ورودی اندازه گیری می کند (0-1023) ، آنها را به یک مقدار ولتاژ (0-5V) تبدیل می کند و این موارد را در نسخه سریال چاپ می کند.
nt value = 0; void setup() { //pinMode(A0, INPUT); //pinMode(A1, INPUT); pinMode(7, INPUT); Serial.begin(9600); } void loop() { value = analogRead(A0);// read X axis value [0..1023] Serial.print("X:"); Serial.print(value, DEC); value = analogRead(A1);// read Y axis value [0..1023] Serial.print(" | Y:"); Serial.print(value, DEC); value = digitalRead(7);// read Button state [0,1] Serial.print(" | Button:"); Serial.println(value, DEC); delay(100); }
کدهای Raspberry Pi
Raspberry PI برخلاف آردوینو، مبدل آنالوگ به دیجیتال (ADC) را در تراشه خود ارائه نمی دهد. بنابراین اگر از سنسور غیر دیجیتال استفاده کنید، Raspbery Pi محدود می شود. برای اجتناب از این موضوع از ماژول هایی که یک ADC 16 بیتی را ایجاد می کنند مانند ماژول KY-53 استفاده می کنیم تا آن را با 4 پین ورودی آنالوگ اضافی ارتقا دهیم. ماژول KY-035 از طریق I2C به Raspberry Pi متصل می شود. داده های آنالوگ را اندازه گیری کرده و آن را به یک سیگنال دیجیتال مناسب برای Raspberry Pi تبدیل می کند. بنابراین اگر می خواهید از سنسورهای آنالوگ به همراه Raspberry Pi استفاده کنید، از KY-053 ADC استفاده کنید.
اتصال پایه های ماژول در برد Raspberry Pi در جدول های زیر آورده شده است:
# This code is using the ADS1115 and the I2C Python Library for Raspberry Pi # import needed modules import time, signal, sys, os import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # initialise variables delayTime = 0.5 # in Sekunden # assigning the ADS1x15 ADC ADS1015 = 0x00 # 12-bit ADC ADS1115 = 0x01 # 16-bit # choosing the amplifing gain # choosing the amplifing gain gain = 4096 # +/- 4.096V # gain = 2048 # +/- 2.048V # gain = 1024 # +/- 1.024V # gain = 512 # +/- 0.512V # gain = 256 # +/- 0.256V # choosing the sampling rate # sps = 8 # 8 Samples per second # sps = 16 # 16 Samples per second # sps = 32 # 32 Samples per second sps = 64 # 64 Samples per second # sps = 128 # 128 Samples per second # sps = 250 # 250 Samples per second # sps = 475 # 475 Samples per second # sps = 860 # 860 Samples per second # assigning the ADC-Channel (1-4) adc_channel_0 = 0 # Channel 0 adc_channel_1 = 1 # Channel 1 adc_channel_2 = 2 # Channel 2 adc_channel_3 = 3 # Channel 3 # initialise ADC (ADS1115) adc = ADS1x15(ic=ADS1115) Button_PIN = 24 GPIO.setup(Button_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP) # main program loop # The program reads the current values of the input pins # and outputs the values at the terminal try: while True: # Current values will be recorded x = adc.readADCSingleEnded(adc_channel_0, gain, sps) y = adc.readADCSingleEnded(adc_channel_1, gain, sps) # Output at the terminal if GPIO.input(Button_PIN) == True: print "X-axis:", x,"mV, ","Y-axis:", y,"mV, Button: not pushed" else: print "X-axis:", x, "mV, ", "Y-axis:", y, "mV, Button: pushed" print "---------------------------------------" # Reset + Delay button_pressed = False time.sleep(delayTime) except KeyboardInterrupt: GPIO.cleanup()