ماژول جوی استیک

موقعیت 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()