שיעור 12 - בקר מנוע

ברוכים הבאים לשיעור!

השיעור מורכב מסדרה של סרטונים, צפו בהם לפי הסדר.

תהנו 🙂

חלק 1: למה צריך בקר מנוע?

חלק 2: מנועים וסוללות

חלק 3: איך עובד בקר מנוע?

חלק 4: תכנות בקר מנוע

העתיקו את הקוד מקופסה זו:


#define MOTOR_PIN_AI1 5
#define MOTOR_PIN_AI2 2
#define MOTOR_PIN_SPEED 4

#define SPEED_CHANNEL 5
#define PWM_FREQ 20000
#define SPEED_RESOLUTION 8

void setup() {
  pinMode(MOTOR_PIN_AI1, OUTPUT);
  pinMode(MOTOR_PIN_AI2, OUTPUT);
  ledcSetup(SPEED_CHANNEL, PWM_FREQ, SPEED_RESOLUTION);
  ledcAttachPin(MOTOR_PIN_SPEED, SPEED_CHANNEL);
}

void loop() {
  //Stop motor  
  digitalWrite(MOTOR_PIN_AI1, LOW);
  digitalWrite(MOTOR_PIN_AI2, LOW);
  delay(2000);

  //***** Forward *******
  digitalWrite(MOTOR_PIN_AI1, LOW);
  digitalWrite(MOTOR_PIN_AI2, HIGH);
  //set speed
  ledcWrite(SPEED_CHANNEL, 50);
  delay(2000);
 
  //***** Backward *******
  digitalWrite(MOTOR_PIN_AI1, HIGH);
  digitalWrite(MOTOR_PIN_AI2, LOW);
  //set speed
  ledcWrite(SPEED_CHANNEL, 50);
  delay(2000);

} 

חלק 5: סרבו

העתיקו את הקוד מקופסה זו:

//ESP32Servo
#include <ESP32Servo.h>
Servo myservo;
#define SERVO_PIN 32

#define MOTOR_PIN_AI1 5
#define MOTOR_PIN_AI2 2
#define MOTOR_PIN_SPEED 4

#define SPEED_CHANNEL 5
#define PWM_FREQ 20000
#define SPEED_RESOLUTION 8

void setup() {
  pinMode(MOTOR_PIN_AI1, OUTPUT);
  pinMode(MOTOR_PIN_AI2, OUTPUT);
  ledcSetup(SPEED_CHANNEL, PWM_FREQ, SPEED_RESOLUTION);
  ledcAttachPin(MOTOR_PIN_SPEED, SPEED_CHANNEL);

  //Servo
  myservo.setPeriodHertz(50);
  myservo.attach(SERVO_PIN, 500, 2400);  
  
  myservo.write(90);
}

void loop() {
  //Stop motor  
  digitalWrite(MOTOR_PIN_AI1, LOW);
  digitalWrite(MOTOR_PIN_AI2, LOW);
  delay(2000);

  //***** Forward *******
  digitalWrite(MOTOR_PIN_AI1, LOW);
  digitalWrite(MOTOR_PIN_AI2, HIGH);
  //set speed
  ledcWrite(SPEED_CHANNEL, 50);
  delay(2000);
 
  //***** Backward *******
  digitalWrite(MOTOR_PIN_AI1, HIGH);
  digitalWrite(MOTOR_PIN_AI2, LOW);
  //set speed
  ledcWrite(SPEED_CHANNEL, 50);
  delay(2000);


} 

בונוס: הוספת לדים לתנועה

פתרון משימת הבונוס:

//FastLED
#include <FastLED.h>
#define NUM_LEDS 16
#define DATA_PIN 33
CRGB leds[NUM_LEDS];

#define MOTOR_PIN_AI1 5
#define MOTOR_PIN_AI2 2
#define MOTOR_PIN_SPEED 4

#define SPEED_CHANNEL 5
#define PWM_FREQ 20000
#define SPEED_RESOLUTION 8

void setup() {
  //FastLED setup
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
  FastLED.setBrightness(50);
 
  pinMode(MOTOR_PIN_AI1, OUTPUT);
  pinMode(MOTOR_PIN_AI2, OUTPUT);
  ledcSetup(SPEED_CHANNEL, PWM_FREQ, SPEED_RESOLUTION);
  ledcAttachPin(MOTOR_PIN_SPEED, SPEED_CHANNEL);
}

void loop() {
  //Stop motor  
  digitalWrite(MOTOR_PIN_AI1, LOW);
  digitalWrite(MOTOR_PIN_AI2, LOW);
  for (int i=0 ; i<16 ; i++ )
     leds[i] = CRGB::Red;
  FastLED.show();
  delay(2000);

  //***** Forward *******
  digitalWrite(MOTOR_PIN_AI1, LOW);
  digitalWrite(MOTOR_PIN_AI2, HIGH);
  //set speed
  ledcWrite(SPEED_CHANNEL, 50);
  for (int i=0 ; i<16 ; i++ )
    leds[i] = CRGB::Green;
  FastLED.show();
  delay(2000);
 
  //***** Backward *******
  digitalWrite(MOTOR_PIN_AI1, HIGH);
  digitalWrite(MOTOR_PIN_AI2, LOW);
  //set speed
  ledcWrite(SPEED_CHANNEL, 50);
  for (int i=0 ; i<16 ; i++ )
     leds[i] = CRGB::Blue;
  FastLED.show();
  delay(2000);


}