Ничего не найдено :(
    В гостях у Самоделкина! » Электроника » Габарит + указатель поворотов для велосипеда

    Габарит + указатель поворотов для велосипеда


    Для безопасности маневров на велосипеде мастер-самодельщик сделал светодиодный указатель поворотов. Включение и выключение поворотов осуществляется с помощью сенсорных кнопок, закрепленных на руле велосипеда. В ночное время указатель дополнительно выполняет функцию заднего габаритного огня.

    Инструменты и материалы:
    -Резистор 330 Ом и 120 Ом;
    -Raspberry Pi 3;
    -Макетная плата;
    -Соединительные провода;
    -Емкостный сенсорный датчик TTP223 - 2 шт;
    -Светодиоды RGB - 13 шт;
    -Светодиоды - 2 шт;
    -Паяльные принадлежности;
    -Powerbank;
    -Электролитический конденсатор 1 мФ;
    -Резистор LDR;
    -Кабельные стяжки;
    -Кабель-канал;
    -Акриловая краска;
    -Кисть;
    -Две пластиковых коробки для корпуса;


    Шаг первый: сборка макета, проверка комплектующих
    Перед сборкой устройства мастер проверяет работу комплектующих. В проекте используются RGB-светодиоды. Такие светодиоды бывают с общим анодом или общим катодом. Для проекта нужно подбирать светодиоды одного типа. Мастер использует светодиоды с общим катодом. В случае использования других светодиодов, для их работы нужно будет вносить изменения в код.
    Для тестирования комплектующих мастер производит монтаж, как на фото.
    Красный: контакт 11 (резистор 330 Ом)
    Зеленый: контакт 13 (резистор 120 Ом)
    Синий: контакт 15 (резистор 120 Ом)
    Загружает на Рассбери код:

    import RPi.GPIO as GPIO
    
    #The pin numbers correspond to exact number on the RPi GPIO
    
    Red_pin = 11
    Green_pin = 13
    Blue_pin = 15
    
    #Connect Common cathode pin to Pin 6
    
    def turnOn(pin):
        GPIO.setmode(GPIO.BOARD) 
    
        GPIO.setup(pin, GPIO.OUT)
        GPIO.output(pin, GPIO.HIGH) #GPIO.output(pin, GPIO.LOW) for common anode type
    
    def turnOff(pin):
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(pin, GPIO.OUT)
        GPIO.output(pin, GPIO.LOW) #GPIO.output(pin, GPIO.HIGH)
    
    def redOn():
        turnOn(Red_pin)
    
    def redOff():
        turnOff(Red_pin)
    
    def greenOn():
        turnOn(Green_pin)
    
    def greenOff():
        turnOff(Green_pin)
    
    def blueOn():
        turnOn(Blue_pin)
    
    def blueOff():
        turnOff(Blue_pin)
    
    try:
        while True:
            cmd = input("Type your command: ")
    
    	if cmd == "red on": #type input commands as mentioned exactly inside ""
                redOn()
            elif cmd == "red off":
                redOff()
            elif cmd == "green on":
                greenOn()
            elif cmd == "green off":
                greenOff()
            elif cmd == "blue on":
                blueOn()
            elif cmd == "blue off":
                blueOff()
            else:
                print("Not a valid command")
    
    except KeyboardInterrupt:
        GPIO.cleanup()


    Для проверки сенсорных модулей подключает их (как подключать можно посмотреть здесь.)
    Загружает следующий код.

    import RPi.GPIO as GPIO
    from time import sleep
    
    GPIO.setmode(IO.BOARD)
    
    touchpad1 = 11 #pin 11
    touchpad2 = 13 #pin 13 
    
    GPIO.setup(touchpad1, GPIO.IN)
    GPIO.setup(touchpad2, GPIO.IN)
    
    # We can club both the above statements together as
    # GPIO.setup([touchpad1, touchpad2], GPIO.IN)
    
    try:
        while True:
            if(GPIO.input(touchpad1) == True):
                print ("Touchpad 1 touched")
                sleep(2)
            elif (GPIO.input(touchpad2) == True):
                print ("Touchpad 2 touched")
                sleep(2)
            else:
                print("Not Touched")
    
    except KeyboardInterrupt:
        GPIO.cleanup() #CTRL-C to exit


    После тестирования деталей можно приступить к сборке устройства.







    Шаг второй: светодиодная панель
    Дальше мастер монтирует светодиоды на плате. Всего на плате размещается 13 светодиодов. 5 левая сторона, 5 правая сторона, 3 центральная линия.

    У все светодиодов мастер соединяет катоды. Затем соединяет все ножки по цветам на левой стороне и на правой стороне.
    У трех центральных светодиодов соединяются красные ножки вместе, а зеленые только у верхнего и нижнего + катоды.
    Габарит + указатель поворотов для велосипеда




    Шаг третий: тестирование панели
    Дальше нужно проверить работу панели. Мастер подключает провода:
    Красный справа - контакт 7
    Зеленый справа - контакт 11
    Общий катод справа - контакт 6 (GND)
    Красный слева - Контакт 13
    Зеленый слева - Контакт 15
    Общий катод слева - контакт 9 (GND)
    Центр Красный - Контакт 16
    Зеленый центр (сверху и снизу) - контакт 18
    Центральный общий катод - контакт 14 (GND)
    Устанавливает код.

    import RPi.GPIO as GPIO
    from time import sleep
    
    #Connect according to below pin numbers
    Red_right = 7
    Green_right = 11
    Red_left = 13
    Green_left = 15
    Red_center = 16
    Green_top_bottom = 18
    
    
    GPIO.setmode(GPIO.BOARD)
    
    def right_turn():
    
        print ("Turning Right")
        blink(Green_right, Green_top_bottom, 0)
    
    def left_turn():
    
        print ("Turning Left")
        blink(Green_left, Green_top_bottom, 0)
    
    
    def blink(pin1, pin2, pin3):
    
        if(pin3 == 0):
    
            GPIO.setup([pin1, pin2], GPIO.OUT)
    
            for x in range(10):
    
                GPIO.output([pin1, pin2], GPIO.HIGH)
                sleep(0.5)
    
                GPIO.output([pin1, pin2], GPIO.LOW)
                sleep(0.5)
    
        else:
    
            GPIO.setup([pin1,pin2, pin3], GPIO.OUT)
    
            for x in range(10):
                GPIO.output([pin1, pin2, pin3], GPIO.HIGH)
                sleep(0.5)
    
                GPIO.output([pin1, pin2, pin3], GPIO.LOW)
                sleep(0.5)
    
    def night_sight():
        print("Night Sight ON")
        blink(Red_left, Red_right, Red_center)
    
    
    try:
        while True:
    
            cmd = input("Test LED for: ")
    
            if cmd == "right turn":
                right_turn()
    
            elif cmd == "left turn":
                left_turn()
    
            elif cmd == "night sight":
                night_sight()
    
            else:
                print("Invalid Command")
    
    except KeyboardInterrupt:
        GPIO.cleanup()


    Проверяет работу.



    Шаг четвертый: сенсорные кнопки
    Подключает сенсорные модули.
    Правая панель:
    Сенсорный модуль
    Контакт GND - контакт 34
    Контакт VCC - Контакт 1
    Контакт SIG - контакт 29
    Светодиод
    Анод (+) вывод - Контакт 33

    Левая панель:
    Сенсорная панель
    Контакт GND - контакт 30
    Контакт VCC - Контакт 17
    Контакт SIG - контакт 31
    Светодиод
    Анод (+) вывод - Контакт 35
    Загружает код.

    import RPi.GPIO as GPIO
    from time import sleep
    
    Red_right = 7
    Green_right = 11
    Red_left = 13
    Green_left = 15
    Red_center = 16
    Green_top_bottom = 18
    right_touch = 29
    left_touch = 31
    right_led = 33
    left_led = 35
    
    triggered = 0
    
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup([right_led, left_led], GPIO.OUT)
    
    GPIO.setup(right_touch, GPIO.IN, pull_up_down = GPIO.PUD_UP)
    GPIO.setup(left_touch, GPIO.IN, pull_up_down = GPIO.PUD_UP)
    
    def right_turn(channel):
    
        GPIO.output(right_led, GPIO.HIGH)
        global triggered
        triggered = 1
        print ("Turning Right")
        blink(Green_right, Green_top_bottom)
    
    def left_turn(channel):
    
        GPIO.output(left_led, GPIO.HIGH)
        global triggered
        triggered = 1
        print ("Turning Left")
        blink(Green_left, Green_top_bottom)
    
    GPIO.add_event_detect(right_touch, GPIO.FALLING, callback = right_turn, bouncetime = 500)
    GPIO.add_event_detect(left_touch, GPIO.FALLING, callback = left_turn, bouncetime = 500)
    
    def blink(pin1, pin2):
    
        GPIO.setup([pin1, pin2], GPIO.OUT)
    
        for x in range(10):
    
            GPIO.output([pin1, pin2], GPIO.HIGH)
            sleep(0.5)
    
            GPIO.output([pin1, pin2], GPIO.LOW)
            sleep(0.5)
    
        GPIO.output([right_led, left_led], GPIO.LOW)
        global triggered
        triggered = 0
    
    def night_sight():
    
        while (True):
    
            GPIO.setup([Red_center, Red_left, Red_right],GPIO.OUT)
    
            global triggered
    
            if (triggered == 0):
    
                print ("Night Sight ON")
    
                GPIO.output([Red_center, Red_left, Red_right], GPIO.HIGH)
                sleep(0.27)
    
                GPIO.output([Red_center, Red_left, Red_right], GPIO.LOW)
                sleep(0.27)
    
            else:
    
                print ("Night Sight OFF")
                GPIO.output([Red_center, Red_left, Red_right], GPIO.LOW)
    
    try:
        night_sight()
    
    
    except KeyboardInterrupt:
        GPIO.cleanup()


    Проверяет работу. В коде заложена следующая функция: габаритный огонь горит в ночное время постоянно. При касании сенсорной кнопки (включения указателя поворотов) габаритный огонь тухнет и начинает работать указатель поворота.

    Сенсорные кнопки закрепляются на руле в месте доступном и удобном для касания пальцем.






    Шаг пятый: фоторезистор
    Для экономии батареи мастер устанавливает в цепь фоторезистор. В этом случае габаритный свет будет светить только в темное время суток.

    Производит подключение согласно схемы.


    Загружает код.

    import RPi.GPIO as GPIO
    from time import sleep
    
    Red_right = 7
    Green_right = 11
    Red_left = 13
    Green_left = 15
    Red_center = 16
    Green_top_bottom = 18
    right_touch = 29
    left_touch = 31
    right_led = 33
    left_led = 35
    
    ldr = 36
    
    triggered = 0
    
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup([right_led, left_led], GPIO.OUT)
    
    GPIO.setup(right_touch, GPIO.IN, pull_up_down = GPIO.PUD_UP)
    GPIO.setup(left_touch, GPIO.IN, pull_up_down = GPIO.PUD_UP)
    
    def right_turn(channel):
    
        GPIO.output(right_led, GPIO.HIGH)
        global triggered
        triggered = 1
        print ("Turning Right")
        blink(Green_right, Green_top_bottom)
    
    def left_turn(channel):
    
        GPIO.output(left_led, GPIO.HIGH)
        global triggered
        triggered = 1
        print ("Turning Left")
        blink(Green_left, Green_top_bottom)
    
    GPIO.add_event_detect(right_touch, GPIO.FALLING, callback = right_turn, bouncetime = 500)
    GPIO.add_event_detect(left_touch, GPIO.FALLING, callback = left_turn, bouncetime = 500)
    
    
    def light_sensing(ldr):
        count = 0
    
        #Output on the pin for
        GPIO.setup(ldr, GPIO.OUT)
        GPIO.output(ldr, GPIO.LOW)
        sleep(0.1)
    
        #Change the pin back to input
        GPIO.setup(ldr, GPIO.IN)
    
        #Count until the pin goes high
        while (GPIO.input(ldr) == GPIO.LOW):
            count += 1
    
        return count
    
    
    def blink(pin1, pin2):
    
        GPIO.setup([pin1, pin2], GPIO.OUT)
    
        for x in range(10):
    
            GPIO.output([pin1, pin2], GPIO.HIGH)
            sleep(0.5)
    
            GPIO.output([pin1, pin2], GPIO.LOW)
            sleep(0.5)
    
        GPIO.output([right_led, left_led], GPIO.LOW)
        global triggered
        triggered = 0
    
    def night_sight():
    
        while (True):
    
            GPIO.setup([Red_center, Red_left, Red_right],GPIO.OUT)
    
            global triggered
    
            if(light_sensing(ldr) > 7800):
    
                if (triggered == 0):
    
                    print ("Night Sight ON")
    
                    GPIO.output([Red_center, Red_left, Red_right], GPIO.HIGH)
                    sleep(0.27)
    
                    GPIO.output([Red_center, Red_left, Red_right], GPIO.LOW)
                    sleep(0.27)
    
            else:
    
                print ("Night Sight OFF")
                GPIO.output([Red_center, Red_left, Red_right], GPIO.LOW)
    
    try:
        night_sight()
    
    
    except KeyboardInterrupt:
        GPIO.cleanup()


    Шаг шестой: корпус
    В качестве корпуса для указателя поворотов и для Рассбери, мастер использует пластиковые коробки.



    Закрепляет в корпуса детали устройства. Провода прокладывает через кабель каналы покрашенные в черный цвет.









    Все готово.


    Сборку устройства можно посмотреть на видео.

    Источник (Source)
    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
    3.3
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    8.5
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    6
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 5.92 из 10 (голосов: 4 / История оценок)

    Добавить комментарий

    5 комментариев
    Гость Николай
    Ради поворотника заморачиваться с распберри? Вы там совсем мухоморов объелись? Пульт от мопеда, электронное реле- вот все деталье
    feonor12
    Korolev,
    В целом согласен. Я говорю о конструкции, а не о полезности. А так да, сам показываю рукой по старинке, хотя тоже всякие эти свистелки-перделки на велосипеде стояли когда-то, когда школьником был и мне казалось это "крутым".
    Korolev
    feonor12,
    Задумка хорошая, реализация - редкий колхоз
    Всегда был против подобного творчества. Во-первых, велосипедист надеется на это устройство, а оно забарахлило, и хорошо, если просто потухло, а если начало жить своей жизнью? Аварийная ситуация! Во-вторых, я, тупорылый, едущий сзади, пока пойму, что означают эти нестандартные моргалки, сам создам аварийную ситуацию! nea
    feonor12
    Задумка хорошая, реализация - редкий колхоз. Ну и распбери пай туй совершенно не нужна (автор бы ещё ноутбук для такой ерунды прикрутил...) - attiny 85, сдвиговый регистр и три ключа выполнят ту-же самую задачу, ещё и свободные пины останутся. А вообще при помощи этих сенсорных модулей можно управлять полевыми транзисторами, которые в свою очередь будут управлять нагрузкой, есть у меня эти модули, проверял. Смысл думаю ясен, что я хочу этим сказать.
    Гость Андрей
    ПОВОРОТНИК ДОРОЖЕ МОЕГО ВЕЛОСИПЕДА))

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Опрос
    А Вы уже рассказали на сайте о своей самоделке?

    Последние комментарии

    Все комментарии