ዝርዝር ሁኔታ:
- ደረጃ 1 የሃርድዌር አስፈላጊነት
- ደረጃ 2 - ደህንነት
- ደረጃ 3 መከላከያ
- ደረጃ 4 መዝናኛ
- ደረጃ 5: IOT መተግበሪያ ዋትሰን በ IBM Bluemix ላይ [ክፍል አንድ]
- ደረጃ 6: መስቀለኛ ቀይ ፍሰቶች
ቪዲዮ: አጠቃላይ እይታ የቤት መዝናኛ እና ደህንነት ስርዓት 6 ደረጃዎች
2024 ደራሲ ደራሲ: John Day | [email protected]. ለመጨረሻ ጊዜ የተሻሻለው: 2024-01-30 07:32
ስለ ማመልከቻው
ይህ የ IOT ስርዓት የቤት መዝናኛ እና ደህንነት ስርዓት ነው።
-
ደህንነት
- የ RFID ካርድ መታ ያድርጉ እና ግብዓት ወደ Firebase ይቀመጣሉ።
- ከተፈቀደ በሰላም መግባት ይችላሉ እና ስዕሉ ተወስዶ ወደ S3 ተሰቅሏል
- ያልተፈቀደ ከሆነ ፣ የመከላከያ ክፍል ይመጣል እና ኤልሲዲ ማያ ገጽ እርስዎ ፈቃድ አልሰጡም ይላል።
-
መከላከያ
- በዳሽቦርዱ ላይ አዝራሩን ይጫኑ።
- ሌዘር ቱሬቶች በዘፈቀደ ፍንዳታ እና ፍጥነት ያጠቃሉ።
-
መዝናኛ
- እንቅስቃሴ ከተገኘ ጨዋታው ይጀምራል።
- ተጠቃሚው ጨዋታውን ከተጫወተ በኋላ ውጤቱ ወደ Firebase ይቀመጣል።
- የ LDR እሴቶች ተወስደው በዳሽቦርዱ ላይ ይወጣሉ።
ይህ መተግበሪያ በ IBM መስቀለኛ-ቀይ የድር አገልጋይ በኩል ሊቆጣጠር የሚችል እና ሊታይ የሚችል ነው። እኛ AWS እና IBM የደመና አገልግሎቶችን እንጠቀማለን እና Firebase ን እንደ የውሂብ ጎታችን እንጠቀም ነበር።
የሚገለጹትን ደረጃዎች ማጠቃለያ
- የሃርድዌር መስፈርቶች
- ደህንነት - የ RFID ግቤትን እና የምስል ማወቂያ ሶፍትዌርን የሚጠቀም የደህንነት ስርዓት እንዴት እንደሚፈጠር
- መከላከያ - የሌዘር ተርባይን እንዴት እንደሚፈጥር
- መዝናኛ - ስምዖን -ይላል ጨዋታን እንዴት መፍጠር እንደሚቻል
- የ IOT መተግበሪያ ዋትሰን በ IBM Bluemix ላይ - ሁሉንም ስርዓቶች ወደ አንድ ዳሽቦርድ እንዴት ማዋሃድ እንደሚቻል
ይቀጥሉ እና ይህንን ፕሮጀክት እንዴት መፍጠር እንደሚቻል የበለጠ ዝርዝር ማብራሪያ ለማግኘት የፒዲኤፍ ፋይሉን ይድረሱ።
ደረጃ 1 የሃርድዌር አስፈላጊነት
የሚያስፈልግዎት ይህ ነው
-
ደህንነት
- 1 Raspberry Pi
- 1 ኤልሲዲ
- 1 RFID አንባቢ
- 1 PiCam
- 2 የ RFID ካርዶች/አዝራሮች
- X ሴት -> ወንድ ዝላይ ገመዶች
-
መከላከያ
- 1 Raspberry Pi
- 2 10 ㏀ ተከላካይ (ለአዝራሮች)
- 2 ማይክሮ ሰርቮ
- 1 650nm Laser አስተላላፊ ሞዱል
- 2 የግፊት አዝራር
- 1 ጫጫታ
- 3 ትናንሽ የጎማ ባንዶች/የኬብል ማሰሪያዎች (ለማስተካከል)
- X ሴት -> ወንድ ዝላይ ገመዶች
- X መደበኛ ዝላይ ኬብሎች
- 1 ትራንዚስተር
- 1 አቅም (Capacitor)
-
መዝናኛዎች
- 1 Raspberry Pi
- 3 1 ㏀ Resistor (ለ LEDs)
- 1 10㏀ Resistor (ለ LDR)
- 3 ኤልኢዲዎች (የተለያዩ ቀለሞች)
- 3 አዝራሮች
- 1 ኤልዲአር
- 1 ኤልሲዲ
- 1 ፒር እንቅስቃሴ ዳሳሽ
- X ሴት -> ወንድ ዝላይ ገመዶች
- X መደበኛ ዝላይ ኬብሎች
ደረጃ 2 - ደህንነት
የደህንነት ስርዓት ሃርድዌር መፍጠር
በ fritzing ዲያግራም ላይ እንደሚታየው ወረዳዎቹን ያገናኙ
የደህንነት ስርዓት ሶፍትዌርን መፍጠር
- አንድ ነገር በመፍጠር AWS ን ያዋቅሩ
- AWS Python ቤተ -መጽሐፍትን ይጫኑ
- ኤልሲዲ ቤተ -መጽሐፍትን ይጫኑ
- የ RFID ቤተ -መጽሐፍትን ይጫኑ
- Firebase ን ያዋቅሩ
- S3 ማከማቻን ያዋቅሩ
- Raspberry Pi ላይ Boto ን ይጫኑ
- Raspberry Pi ላይ AWS ClI ን ይጫኑ
- የ AWS ምስክርነቶችን ይፍጠሩ
- AWS ን ያዋቅሩ
- Security.py ን ወደ RPi ይስቀሉ
- Imagerecognition.py ን ወደ RPi ይስቀሉ
security.py የ rfid ግብዓቶችን የሚያነብ እና ተጠቃሚው ጠላፊ መሆኑን ወይም አለመሆኑን የሚለይ ኮድ ነው። ተጠቃሚው ከታወቀ ፣ አንድ ምስል ተወስዶ ወደ s3 ይሰቀላል። ኮዱ እንዲሁ በ aws MQTT ውስጥ ወደ አንድ ርዕስ ያትማል
ደረጃ 3 መከላከያ
የሌዘር ተርባይን ሃርድዌር መፍጠር
- 2 servos እና 1 Laser Module ን በመጠቀም የሌዘር ተርባይን እንፈጥራለን
- በ fritzing ዲያግራም ላይ እንደሚታየው ወረዳዎቹን ያገናኙ
የሌዘር ተርባይን ሶፍትዌር መፍጠር
ከዚህ በታች ያለው ኮድ የሌዘር ተርባይን በዘፈቀደ አቅጣጫዎች ፣ በዘፈቀደ ፍንዳታ እና ፍጥነት እንዲነሳ ያደርገዋል።
laserturret.py
ከ gpiozero ማስመጣት LED ፣ Buzzer ፣ Button ፣ Servoimport ጊዜ ከምልክት ማስመጣት ለአፍታ ማስመጣት በዘፈቀደ
#የታዘዘ = LED (12)
#pir = MotionSensor (19 ፣ sample_rate = 5 ፣ queue_len = 1) buzzer_pin = Buzzer (17) ጥቃት = አዝራር (5 ፣ pull_up = ሐሰት) #ዳግም አስጀምር = አዝራር (6 ፣ pull_up = False) servo1 = Servo (18) servo2 = ሰርቮ (24)
def ledON ():
led.on () ህትመት ("LED is on") def ledOFF (): led.off () print ("LED is off")
የእሳት አደጋ ()
ማተም ("የጦር መሳሪያዎች ትኩስ") buzzer_pin.on () time.sleep (0.1) buzzer_pin.off ()
def laserturret ():
timeBetweenBurst = random.uniform (0.2, 1) timeBetweenShots = random.uniform (0.05, 0.2) servo1start = random.randrange (-1, 1) servo1end = random.randrange (-1, 1) servo2start = random.randrange (-1, 1) servo2end = random.randrange (-1, 1) numShots = random.randrange (5, 20) servo1change = (servo1end - servo1start)/numShots servo2change = (servo2end - servo2start)/numShots servo1.value = servo1start servo2.value = servo2start time.sleep (0.1) shot = 0 ዝርዝር = [timeBetweenBurst ፣ timeBetweenShots ፣ servo1.value ፣ servo2.value ፣ numShots] ህትመት (ዝርዝር) <numshots: shot+= "1" servo1.value = "servo1start" servo2.value = "servo2start" servo1start = "servo1change" servo2start = "servo2change" fire () = "" time.sleep (timebetweenshots) = "" time.sleep (timebetweenburst)
ማስታወሻዎች = {
'B0': 31, 'C1': 33, 'CS1': 35, 'D1': 37, 'DS1': 39, 'EB1': 39, 'E1': 41, 'F1': 44, 'FS1 ': 46 ፣' G1 ': 49 ፣' GS1 ': 52 ፣' A1 ': 55 ፣' AS1 ': 58 ፣' BB1 ': 58 ፣' B1 ': 62 ፣' C2 ': 65 ፣' CS2 '፦ 69 ፣ 'D2': 73 ፣ 'DS2': 78 ፣ 'EB2': 78 ፣ 'E2': 82 ፣ 'F2': 87 ፣ 'FS2': 93 ፣ 'G2': 98 ፣ 'GS2': 104 ፣ 'A2': 110 ፣ 'AS2': 117 ፣ 'BB2': 123 ፣ 'B2': 123 ፣ 'C3': 131 ፣ 'CS3': 139 ፣ 'D3': 147 ፣ 'DS3': 156 ፣ 'EB3 ': 156,' E3 ': 165,' F3 ': 175,' FS3 ': 185,' G3 ': 196,' GS3 ': 208,' A3 ': 220,' AS3 ': 233,' BB3 ': 233 ፣ 'ቢ 3': 247 ፣ 'C4': 262 ፣ 'CS4': 277 ፣ 'D4': 294 ፣ 'DS4': 311 ፣ 'EB4': 311 ፣ 'E4': 330 ፣ 'F4': 349 ፣ 'FS4': 370 ፣ 'G4': 392 ፣ 'GS4': 415 ፣ 'A4': 440 ፣ 'AS4': 466 ፣ 'BB4': 466 ፣ 'B4': 494 ፣ 'C5': 523 ፣ 'CS5 ': 554,' D5 ': 587,' DS5 ': 622,' EB5 ': 622,' E5 ': 659,' F5 ': 698,' FS5 ': 740,' G5 ': 784,' GS5 ': 831 ፣ 'A5': 880 ፣ 'AS5': 932 ፣ 'BB5': 932 ፣ 'B5': 988 ፣ 'C6': 1047 ፣ 'CS6': 1109 ፣ 'D6': 1175 ፣ 'DS6': 1245 ፣ 'EB6': 1245 ፣ 'E6': 1319, 'F6': 1397, 'FS6': 1480, 'G6': 1568, 'GS6': 1661, 'A 6 ': 1760 ፣' AS6 ': 1865 ፣' BB6 ': 1865 ፣' B6 ': 1976 ፣' C7 ': 2093 ፣' CS7 ': 2217 ፣' D7 ': 2349 ፣' DS7 ': 2489 ፣' EB7 ': 2489 ፣ 'E7': 2637 ፣ 'F7': 2794 ፣ 'FS7': 2960 ፣ 'G7': 3136 ፣ 'GS7': 3322 ፣ 'A7': 3520 ፣ 'AS7': 3729 ፣ 'BB7': 3729 ፣ 'B7': 3951 ፣ 'C8': 4186 ፣ 'CS8': 4435 ፣ 'D8': 4699 ፣ 'DS8': 4978}
def buzz (ድግግሞሽ ፣ ርዝመት) #ተግባሩን “buzz” ይፍጠሩ እና ድምፁን እና ቆይታውን ይመግቡት)
ከሆነ (ድግግሞሽ == 0):
time.s እንቅልፍ (ርዝመት) የመመለሻ ጊዜ = 1.0 / ድግግሞሽ #ድግግሞሽ መዘግየት እሴት = ጊዜ / 2 #የግማሹን ሞገድ numCycles = int (ርዝመት * ድግግሞሽ) #ማዕበሎች ቁጥር = የጊዜ ገደብ x ፍሪክ ለ እኔ በክልል (numCycles)): #ከ 0 ወደ አንድ ተለዋዋጭ ዙር (ዑደት) ከ buzzer_pin.on () time.sleep (delayValue) buzzer_pin.off () time.sleep (delayValue)
def ጨዋታ (ዜማ ፣ ጊዜያዊ ፣ ለአፍታ ፣ ፍጥነት = 0.800)
ለ እኔ በክልል (0 ፣ ሌን (ዜማ)) ፦ # የዘፈን ማስታወሻ አጫውት መጠን = ፍጥነት/ቴምፕ buzz (ዜማ ፣ የማስታወሻ ጊዜ) # በዘፈኑ ማስታወሻ ቆም ይበሉ ድግግሞሹን ይለውጡ ቢትዌን ኖቶች = ማስታወሻ ጊዜ * ለአፍታ ቆም። ለአፍታ አቁም
እውነት እያለ ፦
laserturret () እረፍት;
ደረጃ 4 መዝናኛ
የመዝናኛ ሃርድዌር መፍጠር
የ LEDs ማብራት ዘይቤን መከተል እና ተጓዳኝ ቁልፎችን መጫን ያለብዎትን የ Simon-say አዝራር ጨዋታ እንፈጥራለን። በዳሽቦርዶች ውስጥ ለቀጣይ አጠቃቀም ነጥቦችን እና የጊዜ ማህተምን ወደ firebase NoSQL የውሂብ ጎታ ይሰቅላል።
በ Fritzing ዲያግራም ውስጥ እንደሚታየው ወረዳዎቹን ያገናኙ።
የመዝናኛ ሶፍትዌርን መፍጠር
መዝናኛ.ፒ
ማስመጣት RPi. GPIO = 'h5Sis7TXdoUVncrpjSzGAvhBH' CONSUMER_SECRET = 'ZfDVxc4aTd9doGmBQO3HiSKKzxSTKT4C3g0B3AGx8eETCJm2rY' ACCESS_KEY = 'firebase ማስመጣት firebase CONSUMER_KEY ከ DATETIME ማስመጣት ከ DATETIME ጊዜ ማስመጣት ከእንቅልፉ subprocess ማስመጣት ጥሪ ከ rpi_lcd ማስመጣት LCD ከ GPIOimport ተከታታይ ማስመጣት ጊዜ ማስመጣት የዘፈቀደ ማስመጣት OS ማስመጣት tweepy እንደ 988333099669901312- YDLEQN1weW2n1JP4lxJcFPppCsbvzQh 'ACCESS_SECRET =' K2IlUPur6jx7DO5S0HhhZW29H5AQFOvkMMevSsk9ZzwLk 'ማረጋገጫ = tweepy. OAuthHandler (CONSUMER_KEY, CONSUMER_SECRET) auth.secure = እውነተኛ auth.set_access_token (ACCESS_KEY, ACCESS_SECRET) ኤ ፒ = tweepy. API (ማረጋገጫ) firebase = firebase. FirebaseApplication («https:// iotca2 -12f48.firebaseio.com '፣ የለም) lcd = LCD () lcd.text (' ይዝናኑ! '፣ 1) lcd.text (' መልካም ዕድል! ', 2) እንቅልፍ (1) # ቀይ ፣ ቢጫ ፣ አረንጓዴ መብራቶች = [40, 38, 36] አዝራሮች = [37, 33, 35] ማስታወሻዎች = ["E3" ፣ "A4" ፣ "E4"] በጨዋታ ጨዋታ ፍጥነት ላይ ተጽዕኖ ሊያሳርፉ የሚችሏቸው # እሴቶች = 0.5 # ባንዲራዎች ጨዋታን ለማመልከት ያገለግላሉ ሁኔታ is_displaying_pattern = ሐሰት is_won_curr ent_level = ውሸት_ጨዋታ_ላይ = የውሸት # የጨዋታ ሁኔታ current_level = 1 current_step_of_level = 0 pattern = def initialize_gpio (): GPIO.setmode (GPIO. BOARD) GPIO.setup (LIGHTS ፣ GPIO. OUT ፣ የመጀመሪያ = GPIO. LOW) GPIO። በክልል ውስጥ (BUTTONS ፣ GPIO. IN ፣ pull_up_down = GPIO. PUD_DOWN): GPIO.add_event_detect (BUTTONS ፣ GPIO. FALLING ፣ confirm_player_selection) def confirm_player_selection (channel): international current_velle ካልሆነ_ጨዋታ_ወደቀ_አያሳይም_ፓተርን እና አይደለም_won_current_level እና አይደለም_ጨዋታ_በላይ ፦ flash_led_for_button (ሰርጥ) ሰርጥ ከሆነ == BUTTONS [ስርዓተ -ጥለት [የአሁኑ_እጥፍ_ፍሌቨል]: የአሁኑ_የእግዜር_ደረጃ += 1 የአሁኑ_እውነት_አሁን flash_led_for_button (button_channel): led = LIGHTS [BUTTONS.index (button_channel)] GPIO.output (led, GPIO. HIGH) time.sleep (0.4) GPIO.output (led, GPIO. LOW) def add_new_color_to_pattern (): ዓለም አቀፋዊ ከር የደረጃ_level is_won_current_level = የውሸት current_step_of_level = 0 next_color = random.randint (0, 2) pattern.append (next_color) def display_pattern_to_player (): ግሎባል is_displaying_pattern is_displaying_pattern = True GPIO.: GPIO.output (LIGHTS [pattern ፣ GPIO. HIGH) time.sleep (speed) GPIO.output (LIGHTS [pattern ፣ GPIO. LOW) time.sleep (speed) is_displaying_pattern = የውሸት def wait_for_player_to_repeat_pattern (): ባይሆንም_ወደ_ወቅታዊ_ክልል እና አይደለም_ጨዋታ_አሸናፊነት -ጊዜ_እንቅልፍ (0.1) def reset_board_for_new_game (): ግሎባል is_displaying_pattern ፣ is_won_current_level ፣ is_game_over global current_level ፣ current_step_of_level ፣ pattern isstep_le_se_sele_se_se_se_se_se_se_se_se_se_se_se_se_se_se_se_se_se GPIO.output (LIGHTS ፣ GPIO. LOW) def send_data (ውጤት) lcd.text ('የጨዋታው መጨረሻ' ፣ 1) lcd.text ('በቅርቡ እንገናኝ!', 2) datestr = str (datetime)። አሁን ()) እውነት እያለ - ማተም (datestr) የህትመት (ውጤት) ውሂብ = {'ቀን': datestr ፣ 'score': score} result = firebase.post ('/scores/', data) print (result) score> 2: status = 'አንድ ሰው አስቆጥሯል' +(str (ውጤት))+'በ'+datestr+'!' api.update_status (status = status) break def start_game (): እውነት ሆኖ ሳለ add_new_color_to_pattern () display_pattern_to_player ()_ጨዋታ_በላይ_ይጠብቅ_ጨዋታ_ከዚህ በላይ ከሆነ - send_data (የአሁኑ_አንድ ደረጃ - 1) ማተም ("ጨዋታ በላይ! / n").format (current_level - 1)) እንቅልፍ (2) ህትመት ("ስለተጫወቱ እናመሰግናለን! / n") lcd.text ('', 1) lcd.text ('', 2) የእረፍት ጊዜ። እንቅልፍ (2) def start_game_monitor (): t = threading. Thread (target = start_game) t.daemon = True t.start () t.join () def main (): ይሞክሩት: 'ሌላ' ግልፅ ') ህትመት ("አዲስ ዙር ጀምር! / n") initialize_gpio () start_game_monitor () በመጨረሻም: GPIO.cleanup () _name_ ==' _main_ ': main ()
ደረጃ 5: IOT መተግበሪያ ዋትሰን በ IBM Bluemix ላይ [ክፍል አንድ]
Blumix IoT አገልግሎትን ያዋቅሩ
- የጌትዌይ መሣሪያ ዓይነት ያዘጋጁ
- መሣሪያ ያዘጋጁ
ለ 1 ጊዜ እርምጃዎችን 1 እና 2 ያድርጉ። አንድ RPi ለአንድ ክፍል (ደህንነት/መከላከያ/መዝናኛ) ነው
መስቀለኛ-ቀይ ያዘጋጁ
መስቀለኛ-ቀይ አሂድ
መስቀለኛ-ቀይ ጅምር
- በሃምበርገር ምናሌ (ከላይ በስተቀኝ) ውስጥ ቤተ -ስዕል ለማቀናበር ይሂዱ
-
የሚከተሉትን ፓልቴሎች ያውርዱ
- መስቀለኛ-ቀይ-ዳሽቦርድ
- መስቀለኛ-ቀይ-አስተዋፅኦ-የእሳት ቃጠሎ
- መስቀለኛ-ቀይ-አስተዋፅኦ- ibm-watson-iot
ደረጃ 6: መስቀለኛ ቀይ ፍሰቶች
ፋይሎቹን ያውርዱ እና ወደ መስቀለኛ-ቀይዎ ይላኩ።
የደህንነት መስቀለኛ-ቀይ
የለም
መከላከያ አርፒ ኖድ-ቀይ
laserturret.txt
መዝናኛ Rpi መስቀለኛ-ቀይ
- መዝናኛ rpi flow.txt
- ldr rpi flow.txt
IBM Bluemix መስቀለኛ-ቀይ
የሚመከር:
KS- የአትክልት ስፍራ-አጠቃላይ እይታ 9 ደረጃዎች
KS- የአትክልት ስፍራ-አጠቃላይ እይታ-KS- የአትክልት ስፍራ ለማጠጣት/ለማፍሰስ ሊያገለግል ይችላል።/የአትክልት ቦታዎን/የግሪን ሃውስ እፅዋትን በጓሮው ውስጥ ወይም በቤት ውስጥ የሚያድጉ የሳጥን እፅዋት (ሞዱል ዲዛይን) የ KS- የአትክልት ስርዓት በዋነኝነት የሚከተሉትን ሞጁሎች ያካተተ ነው- ዋና የስርዓት ሣጥን - ሪሌይስ እና የኃይል አቅርቦት ሳጥን
አንድ ንክኪ የሴቶች ደህንነት ደህንነት ስርዓት 3 ደረጃዎች
አንድ ንክኪ የሴቶች ደህንነት ደህንነት ስርዓት - አንድ ንክኪ ማንቂያ 8051 ማይክሮ መቆጣጠሪያን በመጠቀም የሴቶች ደህንነት ስርዓት በዛሬው ዓለም የሴቶች ደህንነት በጣም ሀገር ውስጥ በጣም አስፈላጊ ጉዳይ ነው። ዛሬ ሴቶች ተረበሹ እና ተቸግረዋል እና አንዳንድ ጊዜ አስቸኳይ እርዳታ ሲያስፈልግ። የሚፈለግ Locati የለም
በርቀት መቆጣጠሪያ አማካኝነት ትራንዚስተር የሚቆጣጠር ሞተር; የወረዳ አጠቃላይ እይታ 9 ደረጃዎች
ከርቀት መቆጣጠሪያ ጋር ትራንዚስተር የሚቆጣጠር ሞተር; የወረዳ አጠቃላይ እይታ - ይህ ወረዳ ከርቀት መቆጣጠሪያ ጋር ትራንዚስተር የሚቆጣጠር ሞተር ነው። የርቀት መቆጣጠሪያው ኃይልን ያበራል። ትራንዚስተሩ ሞተሩን ያበራል። ከዚያ የሞተር ፍጥነትን እስከ ዜሮ ድረስ ይቀንሱ
8-ቢት ኮምፒተር በዳቦ ሰሌዳ አጠቃላይ እይታ 3 ደረጃዎች
8-ቢት ኮምፒውተር በዳቦ ሰሌዳ አጠቃላይ እይታ-የዚህ ፕሮጀክት ግቤ የኮምፒተር ሥነ ሕንፃ ፣ የሃርድዌር ዲዛይን እና የመሰብሰቢያ ደረጃ ቋንቋዎችን የበለጠ ግንዛቤ መገንባት ነበር። በኮምፒተር ምህንድስና በማጥናት በዩኒቨርሲቲ ውስጥ ጁኒየር በመሆኔ በቅርቡ በኤሌክትሮኒክስ ፣ በቤተ ሙከራዎች እና
የፒ.ሲ.ቢ ዲዛይን እና የመቁረጫ አጠቃላይ እይታ 5 ደረጃዎች
PCB Designing & Etching Overview - ከቀላል እስከ በጣም የተራቀቁ ድረስ የ PCB ን የመቅረጽ እና የመለጠፍ መንገዶች አሉ። ይህ በእንዲህ እንዳለ የትኛውን እንደሚመርጥ ፣ የትኛው ፍላጎቶችዎን በተሻለ ሁኔታ እንደሚያሟላ ግራ መጋባት ቀላል ነው። እንደ አንዳንድ ጥያቄዎችን ለማብራራት