Napisz kod w arduino służący do kontrolowania silnika DC 24v przy pomocy joysticka ( kontrola kierunku jak i prędkości obrotów silnika ). Dodatkowo na wyświetlaczu LCD 2x16 znaków niebieski + konwerter I2C LCM1602 wskazywany ma być poziom naładowania baterii wyrażony w procentach gdzie 100% oznacza w pełni naładowany zestaw akumulatorów a 0% stan najniższego bezpiecznego napięcia akumulatora, wykorzystaj do tego Dzielnik napięcia 5V/25V dla Arduino.
Pokaż schemat połączeń
Aby zrealizować zadanie kontrolowania silnika DC 24V za pomocą joysticka oraz wyświetlania poziomu naładowania baterii na wyświetlaczu LCD 2x16 z konwerterem I2C, potrzebujemy odpowiedniego sprzętu i oprogramowania. Poniżej przedstawiam szczegółowy kod Arduino oraz schemat połączeń.
Poniżej znajduje się kod Arduino, który realizuje sterowanie silnikiem DC za pomocą joysticka oraz wyświetla poziom naładowania baterii na wyświetlaczu LCD.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Definicje pinów
const int JOYSTICK_X = A0;
const int JOYSTICK_Y = A1;
const int MOTOR_PWM = 9;
const int MOTOR_DIR1 = 7;
const int MOTOR_DIR2 = 8;
const int BATTERY_VOLTAGE = A2;
// Konfiguracja wyświetlacza LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Zmienne do obsługi baterii
const float MAX_BATTERY_VOLTAGE = 25.0;
const float MIN_BATTERY_VOLTAGE = 20.0;
const float R1 = 20000.0; // Rezystor górny dzielnika napięcia
const float R2 = 5000.0; // Rezystor dolny dzielnika napięcia
void setup() {
pinMode(MOTOR_PWM, OUTPUT);
pinMode(MOTOR_DIR1, OUTPUT);
pinMode(MOTOR_DIR2, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Bateria:");
Serial.begin(9600);
}
void loop() {
// Odczyt joysticka
int joystickX = analogRead(JOYSTICK_X);
int joystickY = analogRead(JOYSTICK_Y);
// Mapowanie wartości joysticka na prędkość silnika
int motorSpeed = map(joystickY, 0, 1023, -255, 255);
// Kontrola kierunku i prędkości silnika
if (motorSpeed > 0) {
digitalWrite(MOTOR_DIR1, HIGH);
digitalWrite(MOTOR_DIR2, LOW);
analogWrite(MOTOR_PWM, motorSpeed);
} else if (motorSpeed < 0) {
digitalWrite(MOTOR_DIR1, LOW);
digitalWrite(MOTOR_DIR2, HIGH);
analogWrite(MOTOR_PWM, -motorSpeed);
} else {
digitalWrite(MOTOR_DIR1, LOW);
digitalWrite(MOTOR_DIR2, LOW);
analogWrite(MOTOR_PWM, 0);
}
// Odczyt napięcia baterii
float batteryVoltage = readBatteryVoltage();
int batteryPercentage = map(batteryVoltage * 100, MIN_BATTERY_VOLTAGE * 100, MAX_BATTERY_VOLTAGE * 100, 0, 100);
batteryPercentage = constrain(batteryPercentage, 0, 100);
// Wyświetlanie poziomu naładowania baterii na LCD
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(batteryPercentage);
lcd.print("%");
delay(100);
}
float readBatteryVoltage() {
int sensorValue = analogRead(BATTERY_VOLTAGE);
float voltage = sensorValue * (5.0 / 1023.0);
float batteryVoltage = voltage / (R2 / (R1 + R2));
return batteryVoltage;
}
Joystick:
Silnik DC i sterownik (np. L298N):
Wyświetlacz LCD I2C:
Dzielnik napięcia:
Zasilanie Arduino:
analogRead()
.analogRead()
i przeliczamy je na rzeczywiste napięcie baterii.map()
jest używana do przeliczania wartości z joysticka na zakres prędkości silnika oraz napięcia na procenty.Kod i schemat połączeń przedstawione powyżej pozwalają na kontrolowanie silnika DC za pomocą joysticka oraz wyświetlanie poziomu naładowania baterii na wyświetlaczu LCD. Upewnij się, że wszystkie połączenia są prawidłowe i bezpieczne przed uruchomieniem układu.