Projekt TM2 - Radar

Typ_projektu
microPython
Zdjecie główne
Krótki opis projektu

Niniejszy projekt dotyczy konstruowania radaru wykorzystującego dalmierz, ekran OLED i płytkę Arduino esp8266, obsługiwanego przed kod napisany w języku micro Python.

 

Niezbędne elementy
  • Komputer z oprogramowaniem Portable Thonny
  • Płytka Arduino esp8266
  • Dalmierz
  • Ekran OLED
  • Podłużna płytka stykowa
  • Przewody do połączenia układu: 7x męsko-męski, 1x żeńsko-męski
  • Powerbank
  • Kabel do połączenia płytki z komputerem lub powerbankiem
Opis projektu

Celem projektu było zaprezentowanie umiejętności studenta w zakresie tworzenia układów wykorzystujących płytkę ESP8266 i bliżej poznanych na zajęciach elementów jej oprzyrządowania oraz tworzenia obsługującego ich oprogramowania w poznanym środowisku komputerowymThonny z wykorzystaniem języka micro Python.

W niniejszym sprawozdaniu przedstawiony zostanie układ (oraz kod obsługującego go programu) stanowiący radar wyznaczający odległość od najbliższej przeszkody oraz prędkość z jaką się ona zbliża lub oddala.

Zdjęcia
kod programu
import machine, time
from machine import Pin, I2C
import ssd1306

# ekran OLED:
i2c = I2C(scl=Pin(5), sda=Pin(14))  #piny SCL-D1 i SDA-D5
oled = ssd1306.SSD1306_I2C(128,64,i2c)


# dalmierz:
class HCSR04:
    def __init__(self, trigger_pin, echo_pin, echo_timeout_us=500*2*30):
        self.echo_timeout_us = echo_timeout_us
        # Init trigger pin (out)
        self.trigger = Pin(trigger_pin, mode=Pin.OUT, pull=None)
        self.trigger.value(0)
        # Init echo pin (in)
        self.echo = Pin(echo_pin, mode=Pin.IN, pull=None)

    def _send_pulse_and_wait(self):
        self.trigger.value(0) # Stabilize the sensor
        time.sleep_us(5)
        self.trigger.value(1)
        # Send a 10us pulse.
        time.sleep_us(10)
        self.trigger.value(0)
        try:
            pulse_time = machine.time_pulse_us(self.echo, 1, self.echo_timeout_us)
            return pulse_time
        except OSError as ex:
            if ex.args[0] == 110: # 110 = ETIMEDOUT
                raise OSError('Out of range')
            raise ex

    def distance_cm(self):
        pulse_time = self._send_pulse_and_wait()
        cms = (pulse_time / 2) / 29.1
        return cms
    
sensor = HCSR04(trigger_pin=2, echo_pin=4, echo_timeout_us=10000) #piny D4 i D2

s2=0
while True:
    s1=s2
    suma=0
    for i in range(10):
        suma+=sensor.distance_cm()
        time.sleep(0.01)
    s2=suma/i # odległość mierzona w centymetrach
    ds=s1-s2 # dalmierz na przodzie pojazdu
    v=ds/0.1 # prędkość w mierzona w cm/s
    print("Odległość: ",s2,"cm","      Prędkość: ", v, "cm/s")

    s2_str=str(s2)
    v_str=str(v)


    oled.fill(0)
    oled.text('Distance: ', 10, 18, 1)
    oled.text(s2_str, 90, 18, 1)
    oled.text('Velocity: ', 10, 38, 1)
    oled.text(v_str, 90, 38, 1)
    oled.show()

 programowania (ostatnia ikona powyżej)
Schemat
Tagi
#radar #Arduino #dalmierz #Python #ekranOLED