Оборудование
В этом эксперименте используется то же самое оборудование, что и в разд. «Эксперимент: управление электродвигателем»
viewtopic.php?p=633#p633, но здесь вы не просто включаете и выключаете двигатель, а еще и управляете его скоростью.
Если вы ранее еще не сделали этого, соберите схему из разд. «Эксперимент: управление электродвигателем»
viewtopic.php?p=633#p633. В качестве напоминания компоновка макетной платы для этого эксперимента показана на рисунке
- Компоновка макетной платы для экспериментов с электродвигателем
Подключение Raspberry Pi
Подключите макетную плату к Raspberry Pi, как показано на рисунке ниже: при помощи перемычек «мама-папа» подсоедините заземление с макетной платы к одному из контактов
GND колодки GPIO, а управляющий провод макетной платы - к контакту
18 Raspberry Pi
- Подключение макетной платы для управления двигателем с Raspberry Pi
Программа для Raspberry Pi
Программа для Raspberry Pi принципиально похожа на код Arduino. В нашем случае программа предложит вам вводить значения коэффициента заполнения и тем самым управлять контактом
18.
Код:
Код: Выделить всё
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
control_pin = 18 # (1)
GPIO.setup(control_pin, GPIO.OUT)
motor_pwm = GPIO.PWM(control_pin, 500) # (2)
motor_pwm.start(0) # (3)
try:
while True: # (4)
duty = input('Enter Duty Cycle (0 to 100): ')
if duty < 0 or duty > 100:
print('0 to 100')
else:
motor_pwm.ChangeDutyCycle(duty)
finally:
print("Cleaning up")
GPIO.cleanup()
Уточним некоторые моменты программы по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:
1. Начальная часть кода точно такая же, как и код из разд. «Эксперимент: управление электродвигателем», но затем контакт
18 определяется в качестве вывода.
2. В качестве ШИМ-вывода контакт
18 задается в этой строке (библиотека
RPi.GPIO позволяет в качестве ШИМ-вывода установить любой из контактов GPIO). Параметр
500 означает, что частота ШИМ равна 500 Гц (импульсов в секунду).
3. ШИМ-вывод не начнет работать, пока не будет вызвана функция
start. Ее параметр - это исходное значение коэффициента заполнения, и поскольку мы начинаем работу с выключенным двигателем, это значение равно 0
4. В основном цикле у вас при помощи
input при запрашивается значение
duty, a затем проверяется, в каком оно диапазоне. Если оно находится в диапазоне от 0 до 100, то используется в качестве коэффициента заполнения в функции.
ChangeDutyCycle.
Загружаем и выполняем программу
Запустите программу в режиме администратора при помощи команды sudo, а затем попробуйте вводить различные значения коэффициента заполнения. Скорость двигателя должна меняться, точно так же, как и в случае с Arduino:
Код: Выделить всё
pi@raspberrypi ~/make_action/python $ sudo python pwm_motor_control.py
Enter Duty Cycle (0 to 100) : 50
Enter Duty Cycle (0 to 100) : 10
Enter Duty Cycle (0 to 100) : 100
Enter Duty Cycle (0 to 100) : 0
Enter Duty Cycle (0 to 100) :