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

0 0

Габарит + указатель поворотов для велосипедаДля безопасности маневров на велосипеде мастер-самодельщик сделал светодиодный указатель поворотов. Включение и выключение поворотов осуществляется с помощью сенсорных кнопок, закрепленных на руле велосипеда. В ночное время указатель дополнительно выполняет функцию заднего габаритного огня.
Инструменты и материалы:
-Резистор 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()

Шаг шестой: корпус
В качестве корпуса для указателя поворотов и для Рассбери, мастер использует пластиковые коробки.
Габарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаЗакрепляет в корпуса детали устройства. Провода прокладывает через кабель каналы покрашенные в черный цвет.
Габарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаВсе готово.
Габарит + указатель поворотов для велосипедаГабарит + указатель поворотов для велосипедаСборку устройства можно посмотреть на видео.

 

 

Источник: usamodelkina.ru
Оставить комментарий

Мы используем файлы cookie. Продолжив использование сайта, вы соглашаетесь с Политикой использования файлов cookie и Политикой конфиденциальности Принимаю

Privacy & Cookies Policy