Arduino

Материал из Artem Aleksashkin's Wiki
Перейти к навигации Перейти к поиску

Что такое Arduino?

Ардуино - это открытая программно-аппаратная платформа для прототипирования.

Чтобы понять как это круто, пройдем по шагам как это было до ардуины:

1. Вы выбираете микроконтроллер. Читаете к нему документацию в виде книги обычно. 2. Вы берете текстолит покрытый медью. Проектируете плату. Вытравливаете по трафарету дорожки, чтобы соединить микроконтроллер и выводы. 3. Вы лудите и паяете. 4. Вы собираете программатор. 5. Пишете код и выбираете нужный компилятор. Компилируете код. 6. Прошиваете программатором контроллер. Если все ок - он работает. Если нет - отлаживаете. 7. Начинаете как-то пользоваться им.

Теперь:

1. У Ардуины встроенный программатор, есть IDE с компилятором и все что вам нужно это просто взять код и сразу ее прошить как вам нужно. 2. Соединяете датчики и моторчики - все работает сразу.

Это интересно и без рутины.

Как проверить Arduino

Я работаю в Ubuntu Linux. Скачать последнюю версию IDE можно тут [1]. Запустите ./install.sh чтобы установить ярлыки для быстрого запуска.

sudo usermod -a -G dialout <username>

Убедитесь, что группа есть командой

groups

Иначе перелогиньтесь.

Присоедините Ардуину

ls -l /dev/ttyACM*

Должна быть в списке.

командой arduino запустите IDE. В примерах есть Blink.

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

Прошейте примером, и встроенный диод замигает, или же присоедините диод через резистор 200 кОм на землю и 13 пин.

Реле

Примером Blink можно проверить и реле. Питание +5 вольт, земля и сигнал на 13 пин.

Remote Control

С Ардуино кит поставляется пульт дистанционного управления HX1838 и датчик 1838B. К пульту необходимо приобрести батарейку CR2025.

IR-pinout.jpg

1 - на 11 пин 2 - земля 3 - +5 вольт

Далее качаем либу [2] в zip и ставим ее через IDE (Скетч - Подключить библиотеку - добавить ZIP библиотеку).

ВНИМАНИЕ удалите библиотеку <путь к IDE>/libraries/RobotIRremote т.к. они конфликтуют.

Прошиваем скетчем, открываем Инструменты и монитор порта - смотрим результат.

#include "IRremote.h"

int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11

IRrecv irrecv(receiver);           // create instance of 'irrecv'
decode_results results;            // create instance of 'decode_results'


void setup()
{
  Serial.begin(9600);
  Serial.println("IR Receiver Raw Data + Button Decode Test");
  irrecv.enableIRIn(); // Start the receiver

}


void loop()
{
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    translateIR(); 
    irrecv.resume();
  }  
}
void translateIR() // Car MP3 IR
{
  switch(results.value)
  {

  case 0xFFA25D:  
    Serial.println(" CH-            "); 
    break;

  case 0xFF629D:  
    Serial.println(" CH             "); 
    break;

  case 0xFFE21D:  
    Serial.println(" CH+            "); 
    break;

  case 0xFF22DD:  
    Serial.println(" PREV           "); 
    break;

  case 0xFF02FD:  
    Serial.println(" NEXT           "); 
    break;

  case 0xFFC23D:  
    Serial.println(" PLAY/PAUSE     "); 
    break;

  case 0xFFE01F:  
    Serial.println(" VOL-           "); 
    break;

  case 0xFFA857:  
    Serial.println(" VOL+           "); 
    break;

  case 0xFF906F:  
    Serial.println(" EQ             "); 
    break;

  case 0xFF6897:  
    Serial.println(" 0              "); 
    break;

  case 0xFF9867:  
    Serial.println(" 100+           "); 
    break;

  case 0xFFB04F:  
    Serial.println(" 200+           "); 
    break;

  case 0xFF30CF:  
    Serial.println(" 1              "); 
    break;

  case 0xFF18E7:  
    Serial.println(" 2              "); 
    break;

  case 0xFF7A85:  
    Serial.println(" 3              "); 
    break;

  case 0xFF10EF:  
    Serial.println(" 4              "); 
    break;

  case 0xFF38C7:  
    Serial.println(" 5              "); 
    break;

  case 0xFF5AA5:  
    Serial.println(" 6              "); 
    break;

  case 0xFF42BD:  
    Serial.println(" 7              "); 
    break;

  case 0xFF4AB5:  
    Serial.println(" 8              "); 
    break;

  case 0xFF52AD:  
    Serial.println(" 9              "); 
    break;

  default: 
    Serial.println(" other button   ");

  }

  delay(500);
}

Ультразвуковой датчик hc sr04

const int Trig = 8; 
const int Echo = 9; 
const int ledPin = 11;  // 13 – если будете использовать встроенный в Arduino светодиод

void setup() 
{ 
pinMode(Trig, OUTPUT); 
pinMode(Echo, INPUT); 
pinMode(ledPin, OUTPUT); 
  
Serial.begin(9600); 
}

unsigned int time_us=0;

unsigned int distance_sm=0;

void loop() 
{ 
digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера 
delayMicroseconds(10); // Удерживаем 10 микросекунд 
digitalWrite(Trig, LOW); // Затем убираем 
time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса 
distance_sm=time_us/58; // Пересчитываем в сантиметры 
Serial.println(distance_sm); // Выводим на порт

if (distance_sm<50) // Если расстояние менее 50 сантиметром 
{ 
   digitalWrite(ledPin, 1); // Зажигаем светодиод 
} 
else 
{ 
   digitalWrite(ledPin, 0); // иначе тушим 
} 
  
delay(100); 
}

Сервопривод

#include <Servo.h> //используем библиотеку для работы с сервоприводом

Servo servo; //объявляем переменную servo типа Servo

void setup() //процедура setup

{

servo.attach(10); //привязываем привод к порту 10

}

void loop() //процедура loop

{

servo.write(0); //ставим вал под 0

delay(2000); //ждем 2 секунды

servo.write(180); //ставим вал под 180

delay(2000); //ждем 2 секунды

}