lud: (Default)
[personal profile] lud
Давно хотел сделать что нибудь этакое и вот приобрёл для экспериментов программируемый контроллер Arduino. После того как наморгался светодиодами, начал думать, что бы такое учудить с ним интересное. Всякие утилитарные изделия из него (типа автоматического полива цветов) отложил до лучших времён. И решил сделать из него роботомашинку.

Были куплены: разъём 2,5 мама, 2 резистора на 10К, интегральная микросхема L293D, два инфракрасных датчика GP2Y0D810Z0F, тумблер и готовое шасси ARX_CH09 (с двигателями и прочим). С помощью запчастей из конструктора это всё было собрано вот в такого монстрика.





Код программы:
const int ledPin =  13;     // номер выхода, подключенного к светодиоду
const int sensorPinL = 8;   // Левый датчик
const int sensorPinR = 4;   // Правый датчик
const int rMotPinF = 5;     // Правый мотор вперёд
const int rMotPinB = 6;     // Правый мотор назад
const int lMotPinF = 9;     // Левый мотор вперёд
const int lMotPinB = 10;    // Левый мотор назад

const int wR = 255;
const int wL = 200;
const int wH = 70;
int sensorStateL = 0;
int sensorStateR = 0;
boolean fr = true; // первый датчик сработал справа

void setup() {
  pinMode(sensorPinL, INPUT);
  pinMode(sensorPinR, INPUT);
  pinMode(lMotPinF, OUTPUT);
  pinMode(lMotPinB, OUTPUT);
  pinMode(rMotPinF, OUTPUT);
  pinMode(rMotPinB, OUTPUT);
  pinMode(ledPin, OUTPUT);     
}

int sensorState(){ // опрашиваем датчики
  sensorStateL = digitalRead(sensorPinL);
  sensorStateR = digitalRead(sensorPinR);
  if (sensorStateL == HIGH && sensorStateR == HIGH){return 1;} // впереди пусто
  if (sensorStateL == LOW && sensorStateR == HIGH){return 2;} // препятствие слева
  if (sensorStateL == HIGH && sensorStateR == LOW){return 3;} // препятствие справа
  if (sensorStateL == LOW && sensorStateR == LOW){return 4;} // впереди стена
}

int edem(int lp, int lf, int rf, int lb, int rb){ // включаем моторы
  analogWrite(ledPin, lp);
  analogWrite(lMotPinF, lf);
  analogWrite(rMotPinF, rf);
  analogWrite(lMotPinB, lb);
  analogWrite(rMotPinB, rb);
}
 
void loop(){
  switch (sensorState()){
    case 1: // едем вперёд
      edem(255,wL,wR,0,0);
      break;
    case 2: // едем вправо
      fr = false;
      edem(wH,wL,wH,0,0);      
      break;
    case 3: // едем влево
      fr = true;
      edem(wH,wH,wR,0,0);
      break;
    case 4: // останавливаемся и разворачиваемся
      if (fr) {
        edem(0,0,0,wL,0);
        delay(700);
        edem(0,0,wR,0,0);
        delay(700);
      }else{
        edem(0,0,0,0,wR);
        delay(700);
        edem(0,wL,0,0,0);
        delay(700);
      }
      break;
  }
}

Схема:



Ездим мы вот так:


Может ещё что нибудь потом сделаю.
From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.

December 2012

S M T W T F S
      1
2345678
9101112131415
1617181920 2122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 28th, 2017 02:34 am
Powered by Dreamwidth Studios