1 / 1 / 0
Регистрация: 25.09.2022
Сообщений: 17
|
|
1 | |
Подключение ультразвукового датчика (или его альтернативы) к raspberry pi 3 в среде PROTEUS24.11.2024, 05:50. Показов 282. Ответов 0
Доброе утро! Подскажите, пожалуйста, кто умеет работать в среде Proteus, возможно ли подключить ультразвуковые датчики к raspberry pi 3? Лично у меня не получилось, в качестве альтернативы я решила собрать схему из потенциометра, вольтметра и аналого-цифрового преобразователя MCP8003 (так как RASPBERRY PI не имеет аналоговых входов). Скрин схемы прикреплю. И скрин полноценного проекта также прикреплю. Как мне кажется, схема верна, однако выполняя код для считывания сигнала с преобразователя всегда получаю 0. не понимаю, в чем проблема. Вообще, в своем проекте помимо описанного выше я использую инфракрасные датчики, их получилось подключить без проблем, а также lcd экран, который выводит текстовые результат, прописанный в коде. Пока что я застряла на моменте подключения УЗ датчиков или их аналогов. Может быть, кто-то знает в чем проблема и может помочь ? Буду очень благодарна!
Код
#!/usr/bin/python import time import RPi.GPIO as GPIO import time import os,sys from urllib.parse import urlparse sys.path.append(r'C:\Users\Angelina\AppData\Roaming\Python\Python36\site-packages') import paho.mqtt.client as paho GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) ''' define pin for lcd ''' # Timing constants E_PULSE = 0.0005 E_DELAY = 0.0005 delay = 1 # Define GPIO to LCD mapping LCD_RS = 7 LCD_E = 11 LCD_D4 = 12 LCD_D5 = 13 LCD_D6 = 15 LCD_D7 = 16 slot1_Sensor = 29 slot2_Sensor = 31 slot3_Sensor = 32 GPIO.setup(LCD_E, GPIO.OUT) # E GPIO.setup(LCD_RS, GPIO.OUT) # RS GPIO.setup(LCD_D4, GPIO.OUT) # DB4 GPIO.setup(LCD_D5, GPIO.OUT) # DB5 GPIO.setup(LCD_D6, GPIO.OUT) # DB6 GPIO.setup(LCD_D7, GPIO.OUT) # DB7 GPIO.setup(slot1_Sensor, GPIO.IN) GPIO.setup(slot2_Sensor, GPIO.IN) GPIO.setup(slot3_Sensor, GPIO.IN) GPIO.setup(23, GPIO.OUT) # CLK (GPIO11) GPIO.setup(21, GPIO.IN) # MISO (GPIO10) GPIO.setup(19, GPIO.OUT) # MOSI (GPIO9) GPIO.setup(24, GPIO.OUT) # CS (Chip Select, GPIO8) # Define some device constants LCD_WIDTH = 16 # Maximum characters per line LCD_CHR = True LCD_CMD = False LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line LCD_LINE_3 = 0x90# LCD RAM address for the 3nd line def on_connect(self, mosq, obj, rc): self.subscribe("Fan", 0) def on_publish(mosq, obj, mid): print("mid: " + str(mid)) mqttc = paho.Client() # object declaration # Assign event callbacks mqttc.on_connect = on_connect mqttc.on_publish = on_publish url_str = os.environ.get('CLOUDMQTT_URL', 'tcp://broker.emqx.io:1883') url = urlparse(url_str) mqttc.connect(url.hostname, url.port) distance_threshold = 50 ''' Function Name :lcd_init() Function Description : this function is used to initialized lcd by sending the different commands ''' def lcd_init(): # Initialise display lcd_byte(0x33,LCD_CMD) # 110011 Initialise lcd_byte(0x32,LCD_CMD) # 110010 Initialise lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size lcd_byte(0x01,LCD_CMD) # 000001 Clear display time.sleep(E_DELAY) ''' Function Name :lcd_byte(bits ,mode) Fuction Name :the main purpose of this function to convert the byte data into bit and send to lcd port ''' def lcd_byte(bits, mode): # Send byte to data pins # bits = data # mode = True for character # False for command GPIO.output(LCD_RS, mode) # RS # High bits GPIO.output(LCD_D4, False) GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x10==0x10: GPIO.output(LCD_D4, True) if bits&0x20==0x20: GPIO.output(LCD_D5, True) if bits&0x40==0x40: GPIO.output(LCD_D6, True) if bits&0x80==0x80: GPIO.output(LCD_D7, True) # Toggle 'Enable' pin lcd_toggle_enable() # Low bits GPIO.output(LCD_D4, False) GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x01==0x01: GPIO.output(LCD_D4, True) if bits&0x02==0x02: GPIO.output(LCD_D5, True) if bits&0x04==0x04: GPIO.output(LCD_D6, True) if bits&0x08==0x08: GPIO.output(LCD_D7, True) # Toggle 'Enable' pin lcd_toggle_enable() ''' Function Name : lcd_toggle_enable() Function Description:basically this is used to toggle Enable pin ''' def lcd_toggle_enable(): # Toggle enable time.sleep(E_DELAY) GPIO.output(LCD_E, True) time.sleep(E_PULSE) GPIO.output(LCD_E, False) time.sleep(E_DELAY) ''' Function Name :lcd_string(message,line) Function Description :print the data on lcd ''' def spi_transfer(data): result = 0 for bit in range(8): GPIO.output(19, (data >> (7 - bit)) & 0x01) # передаем бит на MOSI GPIO.output(23, GPIO.HIGH) # Поднимаем CLK time.sleep(0.000001) # Задержка для стабильности GPIO.output(23, GPIO.LOW) # Опускаем CLK time.sleep(0.000001) # Задержка для стабильности result = (result << 1) | GPIO.input(21) # Считываем бит с MISO return result def read_adc(channel): if channel < 0 or channel > 7: return -1 # Неверный канал # Начальная передача для настройки MCP3008 (конфигурация SPI) GPIO.output(24, GPIO.LOW) # Активируем MCP3008 (CS низкий) spi_transfer(1) # Стартовый бит для MCP3008 adc_value = spi_transfer((8 + channel) << 4) # Канал 0-7 adc_value = ((adc_value & 0x03) << 8) # Ожидаем 8 старших бит adc_value |= spi_transfer(0) # Получаем младшие 8 бит GPIO.output(24, GPIO.HIGH) # Деактивируем MCP3008 (CS высокий) return adc_value def calculate_distance(adc_value): # Преобразуем значение ADC в напряжение voltage = (adc_value / 1023.0) * 3.3 # Используем примерное преобразование напряжения в расстояние distance = (voltage - 0.5) * 100 # Это зависит от вашего сенсора return distance def lcd_string(message,line): # Send string to display message = message.ljust(LCD_WIDTH," ") lcd_byte(line, LCD_CMD) for i in range(LCD_WIDTH): lcd_byte(ord(message[i]),LCD_CHR) lcd_init() lcd_string("welcome ",LCD_LINE_1) time.sleep(0.5) lcd_string("Car Parking ",LCD_LINE_1) lcd_string("System ",LCD_LINE_2) time.sleep(0.5) lcd_byte(0x01,LCD_CMD) # 000001 Clear display # Define delay between readings delay = 5 while 1: # Print out results rc = mqttc.loop() slot1_status = GPIO.input(slot1_Sensor) time.sleep(0.2) slot2_status = GPIO.input(slot2_Sensor) time.sleep(0.2) slot3_status = GPIO.input(slot3_Sensor) time.sleep(0.2) adc_value = read_adc(0) if adc_value != -1: distance = calculate_distance(adc_value) print(f"ADC Value: {adc_value}, Distance: {distance:.2f} cm") else: print("Not correct channel") if (slot1_status == True and distance < distance_threshold): lcd_string("Slot1 Parked ",LCD_LINE_1) mqttc.publish("slot1","1") time.sleep(0.2) else: lcd_string("Slot1 Free ",LCD_LINE_1) mqttc.publish("slot1","0") time.sleep(0.2) if (slot2_status == True): lcd_string("Slot2 Parked ",LCD_LINE_2) mqttc.publish("slot2","1") time.sleep(0.2) else: lcd_string("Slot2 Free ",LCD_LINE_2) mqttc.publish("slot2","0") time.sleep(0.2) if (slot3_status == True): lcd_string("Slot3 Parked ",LCD_LINE_3) mqttc.publish("slot3","1") time.sleep(0.2) else: lcd_string("Slot3 Free ",LCD_LINE_3) mqttc.publish("slot3","0") time.sleep(0.2)
0
|
24.11.2024, 05:50 | |
Ответы с готовыми решениями:
0
Странное поведение ультразвукового датчика Показания ультразвукового датчика HC-SR04 Proteus. Нарисовать схему снятия данных с датчика температуры и вывода на дисплей принципиальная схема охранной системы на базе PIC16 в среде proteus Электронные часы с функцией будильника на базе Микроконтроллера AT89C51 в среде разработки Proteus |
24.11.2024, 05:50 | |
24.11.2024, 05:50 | |
Помогаю со студенческими работами здесь
1
Подключение raspberry Raspberry Pi B+ подключение к WiFi 5G nrf24l01 подключение к raspberry pi B model Подключение ЖК-дисплея в Proteus Raspberry pi ssh подключение через интернет подключение датчика Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как использовать Kotlin в Android разработке
InfoMaster 12.01.2025
Язык программирования Kotlin, разработанный компанией JetBrains, стал неотъемлемой частью современного мира Android-разработки. Первоначально представленный в 2011 году, Kotlin был официально. . .
|
Использование Go (Golang) в backend разработке
InfoMaster 12.01.2025
Язык программирования Go (Golang), разработанный компанией Google, стал важным инструментом для разработчиков программного обеспечения, особенно в области бэкенд-разработки. С момента своего. . .
|
Как работать с Laravel в PHP
InfoMaster 12.01.2025
Введение в Laravel
Laravel представляет собой современный PHP-фреймворк с открытым исходным кодом, который значительно упрощает и ускоряет процесс разработки веб-приложений. Этот фреймворк был. . .
|
Как программировать под HCL Notes и создавать свои продукты на ее основе
InfoMaster 11.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой мощную платформу для разработки корпоративных приложений, которая сочетает в себе функции электронной почты, календаря,. . .
|
Как работать с SVN (Subversion)
InfoMaster 11.01.2025
Введение
Система контроля версий является неотъемлемой частью современного процесса разработки программного обеспечения. Она обеспечивает управление изменениями в коде, позволяет отслеживать. . .
|
Использование GraphQL в JavaScript
InfoMaster 11.01.2025
Введение в GraphQL и его преимущества
В современной разработке веб-приложений эффективный обмен данными между клиентом и сервером играет ключевую роль. GraphQL представляет собой язык запросов и. . .
|
Администрирование Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием
Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
|
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
|
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows
Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
|
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
|
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
|
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
|