Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Arduino Лаба

GDG Ternopil
September 11, 2016

Arduino Лаба

Arduino Лаба

GDG Ternopil

September 11, 2016
Tweet

More Decks by GDG Ternopil

Other Decks in Programming

Transcript

  1. Arduino Лаба URL: ​https://goo.gl/1R1AmQ Эта лаба сделана в свободном формате.

    Ниже предложены некоторые задания, в порядке усложнения, но если у вас есть более интересные идеи ­ не упускайте шанс их попробовать! Полезные ссылки • Arduino презентация на ​Русском​ (​English​) • Arduino ​примеры Оглавление (также является списком упражнений): Serial.println: Hello World Подключетие светодиода к питанию Мигающий светодиод Переменный резистор и сенсор расстояния Яркость светодиода в зависимости от расстоаяния Часть 1: Используйте analogWrite чтобы заставить светодиод менять яркость. Часть 2: Используйте сенсор расстояния чтобы менять яркость Контроль Сервомотора EXPERT ONLY: Read values from accelerometer or gyro over I2C
  2. Serial.println: Hello World Пример позволит вам убедиться что Arduino работает

    и исправить возможные неполадки. Если у вас не установлено Arduino, скачать и установить его можно ​здесь​. (или можете попросить у меня flash­ку с файлами). Правильные ссылки внутри тёмно­зелёного прямоугольника (справа или внизу). Пожалуйста НЕ ставьте Hourly Builds! До того как нажать Upload, не забудьте подключить Arduino и выбрать правильную плату и порт. Это находится в меню Tools (подпункты Board и Port). Возможные варианты: • Arduino Nano • Arduino/Genuino Micro • (что­то ещё) Пользователям Windows 10: Если после после подключения ​Arduino Nano​ у вас не показываются никакие порты, попробуйте установить драйвер с ​этой ссылки​ (это драйвер с сайта производителя USB­to­serial чипов). Сама программа: void setup() { Serial.begin(115200); } void loop() { Serial.println("Hello, world "); delay(500); }
  3. Подключетие светодиода к питанию Позволяет подключить светодиод к питанию и

    убедиться что он работает. Не использует микроконтроллер. ​Внимание: светодиод нельзя подключать к питанию напрямую: он может сгореть! Его нужно подключать через резистор. Подключите: +5V ­> [RESISTOR] ­> [LED] ­> Ground Учтите что: • У светодиода есть полярность и он будет гореть только в о одном направлении. Если он не горит, попробуйте поменять полярность. • Не важно с какой "стороны" подключать резистор: можно подключить как и со стороны земли, так и со стороны +5V. Мигающий светодиод Подключите: [Любой цифровой pin: 2 ­ 13] ­> [RESISTOR] ­> [LED] ­> Ground Напишите программу используя "pinMode", "digitalWrite", "delay". Пример: void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, HIGH); delay(200); digitalWrite(2, LOW); delay(500); }
  4. Переменный резистор и сенсор расстояния Подсоедините боковые контакты переменного резистора

    к +5V и GND. Подсоедините средний контакт к любому аналоговому входу (A0, A1, etc). Используйте "analogRead" чтобы считать значения. void setup() { Serial.begin(115200); } void loop() { unsigned short val = analogRead(A0); Serial.println(val); delay(500); } На заметку: • Tools ­> Serial Monitor ­ показывает что Serial.println печатает • Tools ­> Serial Plotter ­ рисует эти значения на графике • analogRead возвращает значения от 0 до 1023 Сенсор расстояния: похоже на переменный резистор. Подсоедините сторону с ​ЧЁРНОЙ проволокой к GND а сторону с ​КРАСНОЙ​ проволокой к +5V. ​Просьба не путать полярность! Иначе сенсор или конденсатор могут сгореть.
  5. Яркость светодиода в зависимости от расстояния Часть 1: Используйте analogWrite

    чтобы заставить светодиод менять яркость. Можете использовать этот пример: void setup() { pinMode(3, OUTPUT); } byte brightness = 0; // 0 to 255 void loop() { analogWrite(3, brightness); brightness++; delay(2); } Внимание, не все контакты поддерживают PWM. Те что поддерживают: • Arduino Nano: 3, 5, 6, 9, 10, 11. • Arduino Micro: 3, 5, 6, 9, 10, 11, 13 Часть 2: Используйте сенсор расстояния чтобы менять яркость Должно быть очевидно как это сделать на основе предыдущих примеров. Учтите что analogRead возвращает значения от 0 до 1023 (10 бит), тогда как analogWrite принимает значения от 0 до 256. Чтобы преобразовать значение, можно использовать функцию ​map​, или просто обычное деление. Также, значение возвращаемое сенсором расстояния может содержать шум вблизи нуля (т.е. возвращать не 0, а небольшое произвольное значение). Чтобы избавиться от этого эффекта, можете добавить код типа: short val = analogRead(A0); if (val < 20) { val = 0; } или: short val = analogRead(A0); val ­= 20; if (val < 0) { val = 0;
  6. }

  7. Контроль Сервомотора Контролируйте сервомотор с помощью переменного резистора, сенсора расстояния,

    или просто пре­программированного движения. Подключение сервомотора У сервомотора 3 провода подключения: • Питание (красный) (+6V) • Ground (чёрный) • Сигнал (подключается к выходу микроконтроллера) Внимание​, сервомотор потребляет достаточно большой ток, поэтому ​следует подключать его к отдельному питанию​ (чтобы не напрягать USB порт вашего компьютера). Используете прилагаемые батарейки (в держателях). При этом Ground (минус) отдельного питания должет быть подключёт к Ground Arduino. Смотрите схему на картинке Примеры Пример 1​: основан на ​Arduino Sweep Example #include <Servo.h> Servo myservo; void setup() { // Starts outputting PWM on a given pin. myservo.attach(2); } void loop() { // 'pos' is a position in degrees: for (int pos = 0; pos <= 180; pos += 1) { myservo.write(pos); // waits 15ms for the servo to reach the position delay(15); } for (int pos = 180; pos >= 0; pos ­= 1) { myservo.write(pos); delay(15);
  8. } } Пример 2: из презентации #include <Servo.h> Servo myservo;

    void setup() { myservo.attach(2); } void loop() { short val = analogRead(A0); short servo_val = map(val, 0, 1023, 0, 180); myservo.write(servo_val); delay(10); }
  9. ДЛЯ ЭКСПЕРТОВ: Считывание значений с акселерометра Это упражнение рассчитано на

    самостоятельное изучение спецификаций акселеромера и и написание кода для того чтобы с ним работать. У меня есть одна плата с акселерометром и гироскопом с которой вы можете попробовать поработать. • Плата с акселерометром и гироскопом​. Там внизу имеется ссылки на datasheets для акселерометра (​ADXL345​) и гироскопа (ITG­3200). • Используйте 3.3V для питиния, не 5V! • Можете посмотреть (​непоказанные​) I2C слайды из презентации. • Используйте Arduino ​Wire​ library. Там также указывается какие пины нужно использовать для I2C SDA/SCL (Nano <­> Uno; Micro <­> Leonardo) Подсказки: • Сначала попробуйте прочитать какой­нибудь регистр: там есть регистры с фиксированными значениями: которые можно использовать чтобы протестировать программу. • Вам нужно будет записать специальные значения в регистры (смотрите datasheet) прежде чем акселерометр начнёт выдавать значения. Примеры кода. Эти примеры из того кода что я написал, так что если хотите, можете структурировать код по своему. void setup() { Wire.begin(); ...... } // Write 1 byte at the given address. // You can always write several subsequent registers by adding more 'Wire.write' calls inline void i2c_write1(byte address, byte reg, byte value1) { Wire.beginTransmission(address); Wire.write(reg); Wire.write(value1); Wire.endTransmission(); } // Begin I2C read. I made it a separate function, so it can be // used for both single­byte and mutli­byte reads: inline void i2c_request_read(byte address, byte reg, byte num_bytes) {
  10. Wire.beginTransmission(address); Wire.write(reg); Wire.endTransmission(); Wire.requestFrom(address, num_bytes); } // Read a single

    byte: inline byte i2c_read_byte(byte address, byte reg) { i2c_request_read(address, reg, 1); return Wire.read(); } // Read multiple bytes example: byte data[ADXL345_DATA_SIZE]; i2c_request_read(I2CADDR_ACCELEROMETER_WRIST, ADXL345_DATA_START, ADXL345_DATA_SIZE); for (int i = 0; i < ADXL345_DATA_SIZE; i+=2) { data[i+1] = Wire.read(); data[i] = Wire.read(); }