Управление фототранзистором двигателя постоянного тока
Итак, у меня есть схема с фототранзистором, и я хочу преобразовать значение фототранзистора в сигнал ШИМ, который может управлять скоростью двигателя. Код, который я придумал, приведен ниже, однако он не работает. Что я сделал не так в своем коде? Я использую чип l293d.
int photoTran = A1;
int reading = 0;
int forward=2;
int backward=3;
int motorspeed=0;
void setup(){
pinMode(photoTran,INPUT);
Serial.begin(9600);
pinMode (backward, OUTPUT);
pinMode (forward, OUTPUT);
}
void loop(){
lcd.setCursor(0,0);
reading = analogRead(photoTran);
lcd.print(reading);
lcd.print(" ");
delay(100);
{
if (reading<30){
digitalWrite(backward,HIGH);
digitalWrite(forward,LOW);
motorspeed = map(reading, 30, 1023, 0, 255);
analogWrite(backward,motorspeed);
}
else {
digitalWrite(backward,LOW);
digitalWrite(forward,HIGH);
motorspeed = map(reading, 30, 400, 0, 255);
analogWrite(forward,motorspeed);
}
}
}
@PythoniusNoobus, 👍1
Обсуждение2 ответа
analogRead()
возвращает целое число от 0 до 1023. Использование значений 30 и 400 в функции map()
, а затем передача значения вне этого диапазона вызовет странные результаты. Вот набросок, иллюстрирующий мою точку зрения.
void setup(){
Serial.begin(9600);
// Печатает от -20 до 684
for(int i = 0; i < 1024; i++){
Serial.println(map(i, 30, 400, 0, 255));
}
Serial.println();
// Печатает от -7 до 255
for(int i = 0; i < 1024; i++){
Serial.println(map(i, 30, 1023, 0, 255));
}
Serial.println();
// Печатает от 0 до 255
for(int i = 0; i < 1024; i++){
Serial.println(map(i, 0, 1023, 0, 255));
}
}
void loop(){}
Если вы используете l293d, вы должны управлять напряжением на его ENABLE PIN, а не на других INPUT PINS (l293d). Вот простой учебник по управлению двигателем с помощью L293d. здесь.
И @VE7JRO прав насчет функции map()
, поскольку вы передаете значения, выходящие за пределы диапазона, пожалуйста, позаботьтесь и об этой части.
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- ПИД-регулятор для управления скоростью двигателя
- Как управлять 6 шаговыми двигателями с помощью Arduino?
- Синусоидальный инвертор
Вам нужно быть немного более конкретным, чем это. Знаете ли вы, что фототранзистор работает сам по себе, как и драйвер двигателя? Кроме того, что не работает? Разве это не компилируется, не показывает правильное значение на ЖК-дисплее, не влияет на двигатель и т. Д.? В вашем коде я вижу "{" после вашей задержки (100), которую я не вижу в этой цели и почему внутри нее находятся операторы if/else. Я бы избавился от этого и проверил., @Braydon Burkhardt
Фототранзистор трудно откалибровать, и его лучше использовать в качестве переключателя (digitalRead), @DataFiddler