» Poradna » Ostatní

Arduino spojeni kódu krokového motoru a ovládání serva ultrasonickým senzorem

 |   |  Microsoft Windows 8.1 Chrome 71.0.3578.98

Dobrý den, potřeboval bych spojit kódy 1) aby mi jel krokový motor neustále 2) aby se servo otočilo do určité polohy po tom co ultrasonický senzor něco zaznmená // Krokový motor a driver// čísla pinů pro digitální výstupyconst int in1 = 8;const int in2 = 9;const int in3 = 10;const int in4 = 11;// proměnná pro nastavení rychlosti,// se zvětšujícím se číslem se rychlost zmenšujeint rychlost = 1;//int uhel = 360;void setup() { // inicializace digitálních výstupů pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT);}void loop() { // plná rotace o 360 stupňů = 512 volání // funkce rotacePoSmeru() či rotaceProtiSmeru() for(int i=0;i<(uhel*64/45);i++){ rotacePoSmeru(); } // pauza po dobu 1 vteřiny delay(1000); for(int i=0;i<(uhel*64/45);i++){ rotaceProtiSmeru(); } // pauza po dobu 1 vteřiny delay(1000);}// zde následují funkce pro volání jednotlivých// kroků pro otočení po či proti směru hodinových// ručičekvoid rotacePoSmeru() { krok1(); krok2(); krok3(); krok4(); krok5(); krok6(); krok7(); krok8();}void rotaceProtiSmeru() { krok8(); krok7(); krok6(); krok5(); krok4(); krok3(); krok2(); krok1();}// každý krok obsahuje výrobcem dané pořadí// pro správné spínání motoru a následnou// pauzu, kterou určujeme rychlost otáčenívoid krok1(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost);}void krok2(){ digitalWrite(in1, HIGH); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost);}void krok3(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost);}void krok4(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost);}void krok5(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost);}void krok6(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, HIGH); delay(rychlost);}void krok7(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost);}void krok8(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost);}#include <Servo.h> //Setup the variables for the HC-SR04 const int trigPin = 6; const int echoPin = 7; // create servo object to control a servo // a maximum of eight servo objects can be created Servo myservo; // variable to store the servo position int pos = 0; void setup() { // initialize serial communication: Serial.begin(9600); // attaches the servo on pin 9 to the servo object myservo.attach(9); } void loop() { // establish variables for duration of the ping, // and the distance result in inches and centimeters: long duration, inches, cm; // The sensor is triggered by a HIGH pulse of 10 or // more microseconds. // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: pinMode(trigPin, OUTPUT); digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Read the signal from the sensor: a HIGH pulse whose // duration is the time (in microseconds) from the sending // of the ping to the reception of its echo off of an object. pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); // convert the time into a distance inches = microsecondsToInches(duration); cm = microsecondsToCentimeters(duration); //Tell the Arduino to print the measurement in the serial console Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); // This if-else statement tells the Arduino at what distance // it should trigger the servo, what the servo should do, // and what it should do if the distance is too far away. if (inches <= 24) {sweep(3); } else if (inches >= 24) {myservo.write(pos); } servo code // Tell the Arduino to wait 0.10 seconds before pinging the // Ultrasonic Sensor again. delay(100); } // Converts the microseconds reading to Inches long microsecondsToInches(long microseconds) { // According to Parallax's datasheet for the PING))), there are // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per // second). This gives the distance travelled by the ping, outbound // and return, so we divide by 2 to get the distance of the obstacle. // See: http://www.parallax.com/dl/docs/prod/acc/28015-PI... return microseconds / 74 / 2; } //Converts the Microseconds Reading to Centimeters long microsecondsToCentimeters(long microseconds) { // The speed of sound is 340 m/s or 29 microseconds per centimeter. // The ping travels out and back, so to find the distance of the // object we take half of the distance travelled. return microseconds / 29 / 2; } //This sub-routein is what dictates the movement of the servo void sweep(int NUM_OF_CYCLES) { // Tells the Arduino to start this loop at 0 and incriment it by 1 // each time the loop completes. This is how the Arduino knows to // stop the loop when a specific number of the // Sweep routein has been ran. for (int j=0; j<NUM_OF_CYCLES; j++)// goes from 0 degrees to 180 degrees for(pos = 0; pos < 180; pos += 1) { // in steps of 1 degree// tell servo to go to position in variable 'pos'myservo.write(pos); // waits 15ms for the servo to reach the position delay(10); } // goes from 180 degrees to 0 degrees for(pos = 180; pos>=1; pos-=1) { // tell servo to go to position in variable 'pos' myservo.write(pos); // waits 15ms for the servo to reach the position delay(10); } }Děkuji.

Odpovědi na otázku

 |   |  Microsoft Windows 10 IE 11.0

Ty dva programy jsou vzájemně nekompatibilní, musely by se kompletně přepsat tak, aby zmizely všechny příkazy delay a rychlost se řídila pomocí systémových hodin. Inspirace viz https://www.arduino.cc/en/Tutorial/BlinkWithoutD... Bude to s odlaďováním několik hodin práce, při ceně čínského klonu Arduino Nano kolem 50 Kč by možná bylo nejjednodušší použít Arduina dvě, jedno na krokový motor, druhé na senzor a servo.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Servo, Void, HIGH, Delay, Distance, Loop, Pulse, Output, Sweep, What, Sensor, Uhel, Parallax, The Loop, Reach


Určitě si přečtěte

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

** Je sice z Aliexpressu, ale funguje ** Můžete ji ovládat hlasem přes Amazon Echo nebo Google Home ** Za tři stovky zautomatizuje menší 230V spotřebič

Jakub Čížek | 101

Antivir zdarma: 8 bezplatných řešení, která zatočí s havětí v počítači

Antivir zdarma: 8 bezplatných řešení, která zatočí s havětí v počítači

** Součástí Windows 10 je integrovaný antivirový program. Stačí to? ** Představíme vám sedm aplikací na boj proti virům a malwaru ** Všechny jsou k dispozici zdarma a některé ani nemusíte instalovat

Karel Kilián | 30



Aktuální číslo časopisu Computer

Megatest 20 procesorů

Srovnání 15 True Wireless sluchátek

Vyplatí se tisknout fotografie doma?

Vybíráme nejlepší základní desky