Hallo ik ben Rien van veen
Ben nog beginneling op het arduino gebied
Heb eerst eens geexpirimenteerd met een arduino kit
Mijn bedoeling is een modelboot te gaan besturen met een arduino
Hiervoor heb ik een :
Arduino mega2650
H bridge l298n
8 kanaals relay module
Carson onvanger
14kanaals carson zender
2 12v dc motoren
Nu heb ik via internet een code geschreven die de h bridge en de relay module helemaal goed bestuurd met de rc zender
Deze werkt perfect
Nu wilde echter een servo Invoegen dat als de ene motor draait her roer naar de goede kant gaat om rond te gaan
#include <Servo.h>
const int servo1 = 32; // Pin for the first servo
int servoVal; // variable to read the value from the analog pin
Servo myservo1; // create servo object to control a servo
//l298n
// Motor A
String readString;
int enA =44;
int in1 = 52;
int in2 = 50;
// Motor B
int enB = 45;
int in3 = 51;
int in4 = 53;
// Motor Speed Values - Start at zero
int MotorSpeed1 = 0;
int MotorSpeed2 = 0;
//rc kanalen
double channel[3];
const int pwmPIN[]={2,3,4,5,6,7,8,9,10,11,12,13}; // an array to identify the PWM input pins (the array can be any length)
int RC_inputs = 0;
int i;
void setup(){
myservo1.attach(servo1); // attaches the servo
for(i=22;i<36;i++)
{
pinMode(i, OUTPUT);//relay pins
digitalWrite(i, HIGH);
}
for(i=2;i<13;i++)
pinMode(i, INPUT);
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Start with motors disabled and direction forward
// Motor A
digitalWrite(enA, LOW);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Motor B
digitalWrite(enB, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
Serial.begin(9600);
}
void loop()
{
channel[0]=pulseIn(2, HIGH,50000);//ch2 ln298
channel[1]=pulseIn(3, HIGH,50000);//ch4 ln298
channel[3]=pulseIn(4, HIGH,50000);//ch8 ln298
channel[4]=pulseIn(5, HIGH,50000);//ch 14 relais1 en relais 2
channel[5]=pulseIn(6, HIGH,50000);//
channel[6]=pulseIn(7, HIGH,50000);
channel[7]=pulseIn(8, HIGH,50000);
channel[8]=pulseIn(9, HIGH,50000);
channel[9]=pulseIn(10, HIGH,50000);
channel[10]=pulseIn(11, HIGH,50000);
channel[11]=pulseIn(12, HIGH,50000);
channel[12]=pulseIn(13, HIGH,50000);
if (channel[3] >1600) //knop naar beneden
{
if (channel[0] < 1400) {
// Set Motor A backward
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// Set Motor B backward
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
MotorSpeed1 = map(channel[0], 1400, 1020, 0, 255);
MotorSpeed2 = map(channel[0], 1400,1020, 0,255);
}
else if (channel[0] > 1500)
{
// This is Forward
// Set Motor A forward
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Set Motor B forward
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
//Determine Motor Speeds
MotorSpeed1 = map(channel[0],1500, 1930, 0, 255);
MotorSpeed2 = map(channel[0],1500, 1930, 0, 255);
}
else
{
// This is Stopped
MotorSpeed1 = 0;
MotorSpeed2 = 0;
}
// Now do the steering
if (channel[3] >1600) //knop naar beneden
if (channel[1] < 1400) {
// Move Left
channel[1] = map(channel[1], 1400, 1020, 0, 255);
MotorSpeed1 = MotorSpeed1 - channel[1];
MotorSpeed2 = MotorSpeed2 + channel[1];
if (MotorSpeed1 < 0)MotorSpeed1 = 0;
if (MotorSpeed2 > 255)MotorSpeed2 = 255;
}
else if (channel[1] > 1550){
// Move Right
channel[1]= map(channel[1], 1508, 1930, 0, 255);
MotorSpeed1 = MotorSpeed1 + channel[1];
MotorSpeed2 = MotorSpeed2 - channel[1];
// Don't exceed range of 0-255 for motor speeds
if (MotorSpeed1 < 0)MotorSpeed1 = 0;
if (MotorSpeed2 > 255)MotorSpeed2 = 255;
}
// Adjust to prevent "buzzing" at very low speed
if (MotorSpeed1 < 10)MotorSpeed1 = 0;
if (MotorSpeed2 < 10)MotorSpeed2 = 0;
// Set the motor speeds
analogWrite(enA, MotorSpeed1);
analogWrite(enB, MotorSpeed2);
}
else if (channel[3]<1600 && channel[3]>1400){
servoVal= map(channel[12], 1020, 1915, 0, 180); // scale it to use it with the servo (result between 0 and 180)
myservo1.write(servoVal); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
if (channel[0] < 1400) {
// Set Motor A backward
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// Set Motor B backward
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
MotorSpeed1 = map(channel[0], 1400, 1020, 0, 255);
MotorSpeed2 = map(channel[0], 1400,1020, 0,255);
}
else if (channel[0] > 1500)
{
// This is Forward
// Set Motor A forward
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Set Motor B forward
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
//Determine Motor Speeds
MotorSpeed1 = map(channel[0],1500, 1930, 0, 255);
MotorSpeed2 = map(channel[0],1500, 1930, 0, 255);
}
}
//relay module
if (Serial.available())
while(Serial.available()){
delay(3);
char c = Serial.read();
readString+=c;
}
if(readString.length() >0)
{
if(readString == "0")
{
digitalWrite(22, HIGH);
}
else if(readString == "1")
{
digitalWrite(22, LOW);
}
readString = "";
}
if (channel[4]>500)
if (channel[4] >1600){
digitalWrite (22, LOW);
}
else if(channel[4]<1200)
{
digitalWrite(23,LOW);
}
else
{
digitalWrite (22, HIGH);
digitalWrite (23,HIGH);
}
if (channel[5]>500)
if (channel[5] >1600){
digitalWrite (24, LOW);
}
else if(channel[5]<1200)
{
digitalWrite(25,LOW);
}
else
{
digitalWrite (24, HIGH);
digitalWrite (25,HIGH);
}
}
Echter zodra ik de regel : Myservo1.attach(servo1) erin zet werkt er niets meer
Hoop dat mijn vehaal diudelijk is
Wie kan helpen