int impuls = 2;
int sonar = 3;
long czas, cm;
const int ledCount = 10;
int ledPins[] = { 4, 5, 6, 7, 8, 9,10,11,12,13 };
void setup() {
pinMode(impuls, OUTPUT);
pinMode(sonar, INPUT);
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
Serial.begin(9600);}
}
void loop()
{
digitalWrite(impuls, LOW);
delayMicroseconds(2);
digitalWrite(impuls, HIGH);
delayMicroseconds(10);
digitalWrite(impuls, LOW);
czas = pulseIn(sonar, HIGH);
cm = mikrosekundynacentymetry(czas);
if (cm >= 5){on1();}else{off1();}
if (cm >= 10){on2();}else{off2();}
if (cm >= 15){on3();}else{off3();}
if (cm >= 20){on4();}else{off4();}
if (cm >= 25){on5();}else{off5();}
if (cm >= 30){on6();}else{off6();}
if (cm >= 35){on7();}else{off7();}
if (cm >= 40){on8();}else{off8();}
if (cm >= 45){on9();}else{off9();}
if (cm >= 50){on10();}else{off10();}
Serial.print("Distance: [");
Serial.print(cm);
Serial.print("]cm\n");
delay(100);}
long mikrosekundynacentymetry(long mikrosekundy)
{return mikrosekundy / 29 / 2;}
void on1(){ digitalWrite( 4, HIGH); }
void on2(){ digitalWrite( 5, HIGH); }
void on3(){ digitalWrite( 6, HIGH); }
void on4(){ digitalWrite( 7, HIGH); }
void on5(){ digitalWrite( 8, HIGH); }
void on6(){ digitalWrite( 9, HIGH); }
void on7(){ digitalWrite(10, HIGH); }
void on8(){ digitalWrite(11, HIGH); }
void on9(){ digitalWrite(12, HIGH); }
void on10(){ digitalWrite(13, HIGH); }
void off1(){ digitalWrite( 4, LOW); }
void off2(){ digitalWrite( 5, LOW); }
void off3(){ digitalWrite( 6, LOW); }
void off4(){ digitalWrite( 7, LOW); }
void off5(){ digitalWrite( 8, LOW); }
void off6(){ digitalWrite( 9, LOW); }
void off7(){ digitalWrite(10, LOW); }
void off8(){ digitalWrite(11, LOW); }
void off9(){ digitalWrite(12, LOW); }
void off10(){ digitalWrite(13, LOW); }
...
int sonar = 3;
long czas, cm;
const int ledCount = 10;
int ledPins[] = { 4, 5, 6, 7, 8, 9,10,11,12,13 };
void setup() {
pinMode(impuls, OUTPUT);
pinMode(sonar, INPUT);
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
Serial.begin(9600);}
}
void loop()
{
digitalWrite(impuls, LOW);
delayMicroseconds(2);
digitalWrite(impuls, HIGH);
delayMicroseconds(10);
digitalWrite(impuls, LOW);
czas = pulseIn(sonar, HIGH);
cm = mikrosekundynacentymetry(czas);
if (cm >= 5){on1();}else{off1();}
if (cm >= 10){on2();}else{off2();}
if (cm >= 15){on3();}else{off3();}
if (cm >= 20){on4();}else{off4();}
if (cm >= 25){on5();}else{off5();}
if (cm >= 30){on6();}else{off6();}
if (cm >= 35){on7();}else{off7();}
if (cm >= 40){on8();}else{off8();}
if (cm >= 45){on9();}else{off9();}
if (cm >= 50){on10();}else{off10();}
Serial.print("Distance: [");
Serial.print(cm);
Serial.print("]cm\n");
delay(100);}
long mikrosekundynacentymetry(long mikrosekundy)
{return mikrosekundy / 29 / 2;}
void on1(){ digitalWrite( 4, HIGH); }
void on2(){ digitalWrite( 5, HIGH); }
void on3(){ digitalWrite( 6, HIGH); }
void on4(){ digitalWrite( 7, HIGH); }
void on5(){ digitalWrite( 8, HIGH); }
void on6(){ digitalWrite( 9, HIGH); }
void on7(){ digitalWrite(10, HIGH); }
void on8(){ digitalWrite(11, HIGH); }
void on9(){ digitalWrite(12, HIGH); }
void on10(){ digitalWrite(13, HIGH); }
void off1(){ digitalWrite( 4, LOW); }
void off2(){ digitalWrite( 5, LOW); }
void off3(){ digitalWrite( 6, LOW); }
void off4(){ digitalWrite( 7, LOW); }
void off5(){ digitalWrite( 8, LOW); }
void off6(){ digitalWrite( 9, LOW); }
void off7(){ digitalWrite(10, LOW); }
void off8(){ digitalWrite(11, LOW); }
void off9(){ digitalWrite(12, LOW); }
void off10(){ digitalWrite(13, LOW); }
Witaj Maćku a może napisał byś jak wykorzystać ten czujnik z wyświetlaczem lcd 2x16 lub w robocie do omijania przeszkód na arduino bo w całej sieci są różne kody i wszystkie nie są poprawne
OdpowiedzUsuńPozdrawiam wasyl2007
Witaj Wasylu, ależ masz bardzo fajny kod w zakładce projekt1 nawet dwa :) chyba :) 2... losowy najbardziej mi się podoba, robot znajduje przeszkodę losuje jedną z trzech możliwości i ją wykonuje... jest mało przewidywalny przez co wciąga na dłuższą chwilę... na końc jest line folower ale niestety nie mogę sobie jeszcze z nim poradzić, cięgle nie wychodzi :(... ale może niebawem... przynajmniej już wiem gdzie problem :) muszę ułożyć kod jakoś logicznie... najwyżej że masz już jakieś rozwiązanie
OdpowiedzUsuńpozdrawiam Maciek
Sorki Maćku nie doczytałem bardzo mi się podobają Twoje artykuły trzymaj tak dalej.Ja też interesuje się arduino ale niestety zawsze budowałem raczej żeczy elektroniczne a na programowaniu nie znam się zupełnie.Też bardzo chciałbym zbudować robocika kupiłem nawet wszystkie potrzebne elementy ale niestety nie mogę poradzić sobie z kodem do arduino wykorzystał bym ten kod który umieściłeś ale u mnie sprawa wygląda inaczej ponieważ ja mam motor shield i u mnie przykładowy kod wygląda tak;
Usuń//określamy, które piny sterują silnikami
//piny sterujące prędkością silników
int EN1 = 6;
int EN2 = 5;
//piny sterujące kierunkiem jazdy
int IN1 = 7;
int IN2 = 4;
int R = 0; //jazda do tyłu
int F = 1; //jazda do przodu
//funkcje sterujące silnikami – pwm określa prędkość, reverse kierunek
void Motor1(int pwm, boolean reverse)
{
analogWrite(EN1,pwm); //ustawia wypełnienie PWM: 0 - silnik zatrzymany, 255 - pełna prędkość
if(reverse)
{
digitalWrite(IN1,HIGH);
}
else
{
digitalWrite(IN1,LOW);
}
}
void Motor2(int pwm, boolean reverse)
{
analogWrite(EN2,pwm); //ustawia wypełnienie PWM: 0 - silnik zatrzymany, 255 - pełna prędkość
if(reverse)
{
digitalWrite(IN2,HIGH);
}
else
{
digitalWrite(IN2,LOW);
}
}
void setup()
{
int i;
for(i=4;i<=7;i++) { //Dla Arduino Motor Shield
pinMode(i, OUTPUT); //ustaw piny 4,5,6,7 jako wyjścia
}
}
void loop() {
//jedź do przodu przez 5 sekund
Motor1(255,F);
Motor2(255,F);
delay(5000);
Motor1(0,F); //zatrzymaj się na 5 sekund
Motor2(0,F);
delay(5000);
//jedź do tyłu przez 5 sekund
Motor1(255,R);
Motor2(255,R);
delay(5000);
Motor1(0,F); //zatrzymaj się na 5 sekund
Motor2(0,F);
delay(5000);
Motor1(255,F);
Motor2(255,R);
delay(1000);
Motor1(0,F); //zatrzymaj się na 5 sekund
Motor2(0,F);
delay(5000);
}
powiedz jeszcze jakie masz objawy :) z urządzeniem? oczywiście
UsuńWitaj rzeczywiście wygląda to strasznie :) oczywiście do rozgryzienia :), to nie tak że ja się na tym w pełni na tym znam ale tak jak i ty się uczę... jedyna podstawa z programowania jaką mam to kurs z lat 80 programowanie w basic'u na commodore64... he he prawie to ten sam poziom prostoty... tak przynajmniej myślałem, potem porobiłem kilka stron w htmlu i wziąłem się na arduino... i mniejwięcej wygląda to jak bym chciał polecieć na księżyc :) na szczęście coraz więcej info jest w internecie ;) a hobby się rozwija...
OdpowiedzUsuńpowiedz dokładnie który motor shield masz? coś poszukam bo ten kod jak na początek jest mocno skomplikowany... sam miałem tak że pierwsze kody jakie znalazłem w sieci były mega rozbudowane... potem okazało się że można w miarę prościej coś zapisać :) przy okazji współpracy wrzucę twój moto shield do bloga...
Witaj oczywiście ten kod to tylko próba jazdy.Chciałem go przerobić żeby współpracował z jakimś czujnikiem ale przyznam szczerze że ten kod mnie przeraził.Twój kod jest dużo bardziej zrozumiały pospieszyłem się z kupnem tego shielda,ale do rzeczy motor shield jest firmy DFrobot 2x2A a kupiłem go w sklepie który pewnie znasz sklep www.trobot.pl tam też jest dokładny opis shielda.Jak będziesz miał chwilkę to zajrzyj na you tube filmik nazywa się "diode the 2nd"Takiego robocika chciałbym zbudować ale oczywiście od chciałbym do gotowego projektu dzielą mnie jakieś 2 lata świetlne
UsuńWitaj Maćku po wielu próbach doszedłem z tym moim kodem robot jedzie do przodu a kiedy wykryje przeszkodę cofa się następnie skręca i jedzie dalej do tego dołożyłem od siebie diodę RGB dioda pali się na zielono a kiedy robot wykryje przeszkodę zmienia kolor na czerwony.Myślałem o tym twoim projekcie i zastanawiałem się dlaczego musisz zatrzymywać robota przed mierzeniem odległości u mnie ten problem nie występuje a mam bardzo głosne silniki,myślę że to za sprawą filtra czyli na przewodach przy silnikach założyłem pierścienie ferytowe to powinno zalatwić problem
OdpowiedzUsuńpozdrawiam