Принципиальная схема для работы биполярного шагового двигателя с использованием LDR
Я новичок в Arduino, кое-как я собрал этот код для запуска шагового двигателя с помощью LDR (разновидность программы слежения за солнечными батареями). Я искал в сети и попытался использовать схему серводвигателя для запуска шагового двигателя, предполагая, что просто заменил серводвигатель с шаговым двигателем будет работать. Я предполагаю, что это не так (потому что серводвигатель не движется в соответствии с входными сигналами LRD). Помогите пожалуйста со схемой.
Вот код, который я использую
const int dirPin = 5;
const int stepPin = 4;
const int enPin = 6;
const int SensorPin1 = A0;
const int SensorPin2 = A1;
int sensorValue1 = 0;
int sensorValue2 = 0;
void setup() {
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(enPin,OUTPUT);
digitalWrite(enPin,LOW);
Serial.begin(9600);
}
void loop() {
sensorValue1 = analogRead(SensorPin1);
Serial.println(sensorValue1);
sensorValue2 = analogRead(SensorPin2);
Serial.println(sensorValue2);
if(sensorValue1 < 40 && sensorValue2 < 400){
Serial.print("No sun Detected");
digitalWrite(dirPin,LOW);
digitalWrite(stepPin,LOW);
}
else if(sensorValue1 > 400){
digitalWrite(dirPin,HIGH);
digitalWrite(stepPin,HIGH);
}
else if(sensorValue2 > 400){
digitalWrite(dirPin,LOW);
digitalWrite(stepPin,HIGH);
}
}
Используемое оборудование:
- Биполярный шаговый двигатель — NEMA 23, крутящий момент 20 кг
- Драйвер шагового двигателя: TB6600
- Источник питания: SMPS 12 В, 5 ампер.
- ЛДР: 2
- Резисторы: 2 резистора по 10 кОм.
- 1 Arduino Uno
- Макетная плата
@Adwaiot Sakarde, 👍-1
Обсуждение1 ответ
▲ 1
Если это поможет, я немного изменил ваш код.
const int dirPin = 8;
const int stepPin = 7;
const int enPin = 13;//с контактом 13 Вы можете контролировать встроенный светодиод, если он горит, «включить» ВЫСОКИЙ уровень, и шаговый двигатель будет вращаться.
const int rightSensorPin = A0;
const int leftSensorPin = A1;
int rightSensorRead = 0;
int leftSensorRead = 0;
int rightLightPct = 0;
int leftLightPct = 0;
int degreeChange = 1;
void setup() {
Serial.begin(9600);
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(enPin,OUTPUT);
pinMode(A0, INPUT_PULLUP);//дополнительные резисторы не нужны. Просто подключите одну ногу LDR к A0, а другую к GND.
pinMode(A1, INPUT_PULLUP);
}
void loop() {
rightSensorRead = analogRead(rightSensorPin);
leftSensorRead = analogRead(leftSensorPin);
rightLightPct = map(rightSensorRead, 0, 1023, 0, 100);
leftLightPct = map(leftSensorRead, 0, 1023, 0, 100);
degreeChange = map(abs(rightLightPct-leftLightPct),0,100,2,10);
Serial.print("right = ");
Serial.print(rightSensorRead);
Serial.print(" left = ");
Serial.print(leftSensorRead);
Serial.print(" Pct r/l = ");
Serial.print(rightLightPct);
Serial.print("/");
Serial.println(leftLightPct);
if(rightLightPct < 15 && leftLightPct < 15){
Serial.println("Sun is detected");
digitalWrite(enPin, LOW);
digitalWrite(dirPin,LOW);
digitalWrite(stepPin,LOW);
delay(5000);//если что-то мешает, программа ждет 5 сек. Если за это время ничего не произойдет, программа продолжится. Это время может стереть или добавить еще немного.
}else if(rightLightPct > 50 && leftLightPct > 50){
Serial.println("Sun is set!");
digitalWrite(enPin, LOW);
digitalWrite(dirPin,LOW);
digitalWrite(stepPin,LOW);
}else if(rightLightPct > 20 && leftLightPct > 20){
Serial.println("Seeking sun!");
digitalWrite(enPin, HIGH);
digitalWrite(dirPin,LOW);
digitalWrite(stepPin,LOW);
delay(1);
digitalWrite(stepPin,HIGH);
}else if(rightLightPct > leftLightPct){
Serial.println("Turning CW!");
digitalWrite(enPin, HIGH);
digitalWrite(dirPin,HIGH);
digitalWrite(stepPin,LOW);
delay(1);
digitalWrite(stepPin,HIGH);
}else{
Serial.println("Turning CCW!");
digitalWrite(enPin, HIGH);
digitalWrite(dirPin,LOW);
digitalWrite(stepPin,LOW);
delay(1);
digitalWrite(stepPin,HIGH);
}
}
,
@Tarvo Sööt
Смотрите также:
- Управление направлением шагового двигателя с помощью кнопок.
- Шаговый двигатель не работает с платой A4988
- Grbl на Arduino Uno (Elegoo) с неработающим шаговым двигателем DM542 + nema24
- Кнопка сброса не работает + не могу загрузить код, что не так?
- Непрерывное обнаружение кнопок для шагового управления
- Справка по библиотеке AccelStepper - Одновременное управление двигателем
- Как позволить шаговому двигателю вращаться постоянно?
- Почему при задержке шаговый двигатель останавливается? И почему команда break вызывает ошибку?
С большинством драйверов шагового двигателя шаговый двигатель будет двигаться на 1 (!) шаг, когда вы подаете 1 импульс на вход (имеется в виду переход низкий-высокий-низкий или инверсия). Ваш код будет управлять двигателем максимум на 1 шаг, скорее всего, недостаточно, чтобы его увидеть. Генерировать больше импульсов, @chrisl
Измените
digitalWrite(stepPin,LOW);
наdigitalWrite(stepPin,LOW);delay(1);digitalWrite(stepPin,HIGH);
, @GerbenСпасибо @chrisl .. постараюсь сообщить вам ... но я все еще ищу электрическую схему, @Adwaiot Sakarde
Для принципиальной схемы: вы видели, например, [это руководство пользователя по TB6600](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&cad=rja&uact=8&ved=2ahUKEwi1t7C798ThAhUSsaQKHV43CqIQFjAGegQIABAB&url =https%3A%2F%2Fwww.dfrobot.com%2Fwiki%2Findex.php%2FTB6600_Stepper_Motor_Driver_SKU%3A_DRI0043&usg=AOvVaw3StPPcyHQy8k_v1Gerphcl)? Там упоминается, как драйвер должен быть подключен к Arduino и к двигателю. Вы даже можете скачать более подробное руководство пользователя в формате pdf., @chrisl