.. note:: Ciao, benvenuto nella community di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati. **Perché unirti a noi?** - **Supporto esperto**: Risolvi problemi post-vendita e sfide tecniche con l'aiuto della nostra community e del nostro team. - **Impara e condividi**: Scambia suggerimenti e tutorial per migliorare le tue competenze. - **Anteprime esclusive**: Ottieni accesso anticipato ai nuovi annunci di prodotto e anteprime esclusive. - **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti. - **Promozioni festive e giveaway**: Partecipa a promozioni e omaggi durante le festività. 👉 Sei pronto a esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi stesso! .. _py_cliff: 6. Rilevamento del Burrone ============================= Diamo al PiCar-X un po' di consapevolezza di autoconservazione e insegniamogli a utilizzare il proprio modulo grayscale per evitare di precipitare da un burrone. In questo esempio, l'auto rimarrà inattiva. Se la spingi verso un burrone, si sveglierà immediatamente, arretrerà e dirà "pericolo". **Esegui il Codice** .. raw:: html .. code-block:: cd ~/picar-x/example sudo python3 6.cliff_detection.py **Codice** .. note:: Puoi **Modificare/Reset/Scopiare/Eseguire/Fermare** il codice qui sotto. Prima di ciò, devi andare al percorso del codice sorgente come ``picar-x/example``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto. .. raw:: html .. code-block:: python from picarx import Picarx from time import sleep from robot_hat import TTS tts = TTS() tts.lang("en-US") px = Picarx() # px = Picarx(grayscale_pins=['A0', 'A1', 'A2']) # modifica manuale del valore di riferimento px.set_cliff_reference([200, 200, 200]) current_state = None px_power = 10 offset = 20 last_state = "safe" if __name__=='__main__': try: while True: gm_val_list = px.get_grayscale_data() gm_state = px.get_cliff_status(gm_val_list) # print("lo stato del burrone è: %s"%gm_state) if gm_state is False: state = "safe" px.stop() else: state = "danger" px.backward(80) if last_state == "safe": tts.say("danger") sleep(0.1) last_state = state finally: px.stop() print("stop and exit") sleep(0.1) **Come funziona?** La funzione per rilevare il burrone è simile a questa: * ``get_grayscale_data()``: Questo metodo restituisce direttamente le letture dei tre sensori, da destra a sinistra. Più luminosa è l'area, maggiore sarà il valore ottenuto. * ``get_cliff_status(gm_val_list)``: Questo metodo confronta le letture delle tre sonde e restituisce un risultato. Se il risultato è vero, viene rilevato che c'è un burrone davanti all'auto.