Взаимодействие с Arduino через Android
Хотите послать текстовое сообщение с вашего смартфона с ОС Android на свою плату Arduino? В этой статье написано, как это сделать!
Что потребуется
- смартфон на Android с поддержкой режима USB хоста (т.е. поддержка OTG) – большинство устройств, работающих с Android 3.1 и выше, поддерживают этот режим. Проверьте свой телефон с помощью USB Host Diagnostics App из Play Store;
- Arduino – любая версия. Я буду использовать Uno R3;
- USB кабель для Arduino;
- USB OTG кабель – он необходим вам, чтобы подключить USB кабель Arduino к порту micro-USB телефона;
- Android Studio – вам необходимо установить его. Это довольно просто сделать. Android Studio делает разработку приложений проще, благодаря своим предположениям и генерации кода. Это одна из лучших IDE. Вы также можете использовать эту статью в качестве руководства по установке Android IDE.
Основные компоненты приложения для Android
В Android приложении есть три основных файла:
MainActivity.javaЗдесь находится выполняемый код на Java, который управляет тем, как будет функционировать приложение.activity_main.xmlСодержит макет приложения, то есть, компоненты: кнопки, компоненты отображения текста и т.д.AndroidManifest.xmlЗдесь вы определяете, когда приложение должно запускаться, в какие права ему нужны, и к какому аппаратному обеспечению ему необходимо получить доступ.
Еще есть множество других файлов, но все они связаны друг с другом с помощью этих трех.
Активность может быть охарактеризована, как экран, где пользователь взаимодействует с телефоном. Активности содержат такие виджеты, как кнопки, текстовые поля, изображения и т.д.
, которые помогают в передаче информации.
Данное руководство будет использовать только одну активность, MainActivity, которая будет принимать введенный пользователем текст, чтобы отправить его на Arduino, а также отображать принятый текст.
Макет
Макет Android приложения для взаимодействия с Arduino
Мы будем использовать тот же макет, что и в USB App и Bluetooth App. Он прост и содержит минимум виджетов, необходимых для проверки соединения между устройствами.
Как вы можете видеть, он содержит виджет EditText для получения данных от пользователя, кнопки для запуска соединения, передачи данных, завершения соединения и очистки TextView. Полученные данные отображаются в TextView (пустое пространство под кнопками).
Вот часть XML кода. Поскольку код для кнопок похож, здесь он не приводится. Полный код можно скачать по ссылке в конце статьи.
Я использовал здесь RelativeLayout, а это означает, что каждый виджет расположен относительно виджетов вокруг него.
Макет может быть легко воссоздан на вкладке Design Tab, где вы можете перетащить виджеты туда, куда хотите. Нам необходимо описать, что будет происходить при нажатии на кнопку.
Для этого используется метод onClick. Укажите имя метода в XML коде для кнопки. Для этого добавьте строку:
android:onClick=”onClickMethod”
Теперь наведите курсор мыши на эту строку, слева должно будет появиться предупреждение, похожее на это:
Предупреждение в Android Studio
Нажмите на варианте «Создать onClick…». Это автоматически добавит код метода onClick в MainActivity.java. Вам необходимо выполнить это для каждой кнопки.
Библиотека USB Serial
Настройка последовательного соединения в Android довольно трудоемка, так как требует от вас ручной настройки множества вещей, поэтому я нашел несколько библиотек, которые делают всё это автоматически. Я протестировал несколько из них и, наконец, остановился на библиотеке UsbSerial от Github пользователя felHR85.
Среди подобных библиотек, что я нашел, она единственная до сих пор обновляется. Ее довольно легко настроить и использовать. Чтобы добавить библиотеку в свой проект, скачайте последнюю версию JAR файла на Github. Поместите его в подкаталог libs в каталоге вашего проекта.
Затем в файловом проводнике в Android Studio кликните правой кнопкой мыши на JAR файле и выберите «Добавить как библиотеку» (Add as Library). Вот и всё!
Алгоритм выполнения программы
Алгоритм выполнения Android программы для взаимодействия с Arduino
Это краткий план того, как мы будем действовать. Каждая активность имеет метод onCreate(), который запускается при создании активности.
Какой бы код вы ни хотели запустить в начале, он должен быть помещен внутрь этого метода. Обратите внимание, что чтение из устройства является асинхронным, то есть оно будет работать в фоновом режиме.
Это делается для того, чтобы данные были получены как можно скорее.
Открытие соединения
Во-первых, давайте определим метод onClick для кнопки Begin. При нажатии необходимо выполнить поиск всех подключенных устройств, а затем проверить, совпадает ли VendorID подключенного устройства (ID поставщика) с VendorID Arduino.
Если совпадение найдено, то у пользователя должно быть запрошено разрешение. Каждое ведомое USB устройство имеет ID поставщика (Vendor ID) и ID продукта (Product ID), которые могут быть использованы для определения того, какие драйвера должны использоваться для этого устройства.
Vendor ID для любой платы Arduino равен 0x2341 или 9025.
public void onClickStart(View view) { HashMap usbDevices = usbManager.getDeviceList(); if (!usbDevices.isEmpty()) { boolean keep = true; for (Map.Entry entry : usbDevices.entrySet()) { device = entry.getValue(); int deviceVID = device.getVendorId(); if (deviceVID == 0x2341) //Arduino Vendor ID { PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); usbManager.requestPermission(device, pi); keep = false; } else { connection = null; device = null; } if (!keep) break; } } }
Теперь давайте определим BroadcastReceiver для приема широковещательных сообщений, чтобы запросить у пользователя разрешения, а также для автоматического запуска соединения, когда устройство подключено, и закрытия соединения, когда оно отключено.
// Приемник широковещательных сообщений для автоматического запуска и закрытия последовательного соединения. private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION_USB_PERMISSION)) { boolean granted = intent.getExtras().getBoolean(UsbManager.EXTRA_PERMISSION_GRANTED); if (granted) { connection = usbManager.openDevice(device); serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection); if (serialPort != null) { if (serialPort.open()) { //Установить параметры последовательного соедниения. setUiEnabled(true); //Включить кнопки в UI. serialPort.setBaudRate(9600); serialPort.setDataBits(UsbSerialInterface.DATA_BITS_8); serialPort.setStopBits(UsbSerialInterface.STOP_BITS_1); serialPort.setParity(UsbSerialInterface.PARITY_NONE); serialPort.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF); serialPort.read(mCallback); // tvAppend(textView,”Serial Connection Opened!
“); } else { Log.d(“SERIAL”, “PORT NOT OPEN”); } } else { Log.d(“SERIAL”, “PORT IS NULL”); } } else { Log.d(“SERIAL”, “PERM NOT GRANTED”); } } else if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) { onClickStart(startButton); } else if (intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) { onClickStop(stopButton); } }; };
Если первое условие IF выполняется, и если пользователь дал разрешение, то начать соединение с устройством, у которого Vendor ID совпадает с необходимым нам Vendor ID. Кроме того, если принято широковещательное сообщение о подключении или отключении устройства, вручную вызывать методы onClick для кнопок Start и Stop.
SerialPort определяется с использованием устройства и соединения в качестве аргументов. В случае успеха открыть SerialPort и установить соответствующие параметры. Значения параметров для Arduino Uno равны: 8 бит данных, 1 стоповый бит, бита четности нет, управление потоком выключено.
Скорость передачи данных может быть 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200 бит/с, но мы будем использовать стандартные 9600 бит/с.
Прием данных от устройства
Во фрагменте кода выше обратите внимание на строку, содержащую serialPort.read(mCallback). Здесь функции read передается ссылка на объект Callback, который будет автоматически срабатывать при обнаружении входящих данных.
UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() { // Определение метода обратного вызова, который вызывается при приеме данных. @Override public void onReceivedData(byte[] arg0) { String data = null; try { data = new String(arg0, “UTF-8”); data.concat(“/n”); tvAppend(textView, data); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } };
Полученные данные будут в форме необработанных байтов. Нам придется перекодировать их в читаемый формат, например, UTF-8. Затем они добавляются в TextView с помощью специального метода tvAppend().
Это делается так потому, что любые изменения в пользовательском интерфейсе могут выполняться только в потоке пользовательского интерфейса.
Так как данный Callback будет запущен, как фоновый поток, то он не может напрямую повлиять на пользовательский интерфейс.
private void tvAppend(TextView tv, CharSequence text) { final TextView ftv = tv; final CharSequence ftext = text; runOnUiThread(new Runnable() { @Override public void run() { ftv.append(ftext); } }); }
Передача данных на устройство
Передача данных относительно проста по сравнению с чтением данных с устройства. Это простой вызов функции с байтами данных, которые необходимо передать, в качестве аргумента. Это будет реализовано в методе onClick кнопки Send.
serialPort.write(string.getBytes());
Закрытие соединения
Чтобы закрыть соединение, просто закройте последовательный порт.
serialPort.close();
Манифест приложения
Манифест объявляет, какие дополнительные разрешения могут потребоваться приложению. Единственное необходимое нам разрешение – это разрешение сделать телефон USB хостом. Добавьте следующую строку в манифест:
Приложение можно заставить запускаться автоматически, добавив фильтр интентов в главную активность MainActivity. Этот фильтр интентов будет срабатывать при подключении любого нового устройства. Вид устройства может быть указан явно с помощью ID поставщика (Vendor ID) и/или ID продукта (Product ID) в XML файле.
Обратите внимание на строку “android:resource=”@xml/device_filter”. Она говорит компилятору, что он может найти свойства устройства в файле с именем device_filter в каталоге src/main/res/xml, поэтому создайте подкаталог “xml” в каталоге src/main/res и поместите в него файл со следующим содержанием:
Тестирование приложения
Соберите приложение и запустите его на своем смартфоне. Теперь запустите Arduino IDE и настройте Arduino для простого эхо всего, что плата будет принимать через последовательный порт. Вот очень простой код, помогающий сделать это:
void setup() { Serial.begin(9600); } void loop() { char c; if(Serial.available()) { c = Serial.read(); Serial.print(c); } }
Теперь подключите Arduino к microUSB порту телефона, используя OTG кабель. Приложение должно запуститься автоматически. Попробуйте послать какой-нибудь текст, и те же данные будут возвращены обратно!
Тестирование Android приложения для взаимодействия с Arduino
Заключение
Данная статья показывает, как Arduino может общаться с вашим смартфоном.
И возможности использования этого бесконечны! В случае, когда необходимы данные с любого датчика, которого нет среди встроенных в смартфон, можно воспользоваться любым микроконтроллером для считывания данных с этого датчика и передачи их на смартфон. В следующей статье будет показано, как подключить смартфон к Arduino, используя популярный bluetooth модуль HC05.
Оригинал статьи:
- Hariharan Mathavan. Communicate with Your Arduino Through Android
Arduino Uno
Отладочная плата Arduino Uno построена на микроконтроллере Atmega328P.
Она имеет 14 цифровых входных/выходных выводов (6 из которых могут использоваться в качестве ШИМ выходов), 6 аналоговых входов, кварцевый резонатор 16 МГц, подключение USB, разъем питания, разъем ICSP и кнопку перезагрузки. Она содержит всё необходимое для работы с микроконтроллером; для того, чтобы начать работу с ней, просто подключите…
Источник: https://radioprog.ru/post/148
Создаем Android-приложение для управления домашним роботом через Bluetooth
В этой статье представлена пошаговая инструкция, которая поможет вам самостоятельно создать приложение для Android-смартфона, предназначенное для управления чем-либо через Bluetooth.
Для демонстрации мы подробно разберем пример мигания светодиодом на Arduino по командам с телефона или планшета.
В результате выполнения наших инструкций вы научитесь делать вот так:
Для управления домашним роботом достаточно добавить кнопок и обработать их команды на стороне Arduino.
Что для этого потребуется
- Любая Arduino-совместимая плата
- Bluetooth-модуль
- Устройство на котором установлена ОС Android
В качестве Bluetooth-модуля лучше всего использовать HC-05. Его легко купить в китайском интернет магазине или на eBay. Модуль питается от 3.3 В, но его линии I/O могут работать и с 5-вольтовой логикой, что позволяет подключать его UART к Arduino.
Bluetooth-модуль HC-05
Подключение Bluetooth-модуля к Arduino
Так теперь нам нужно подключить нашу Arduino с Bluetooth. Если на Arduino нет вывода с 3.3В , а только 5В то нужен будет поставить стабилизатор чтобы снизить питание. Назначение выводов HC-05 легко найти в интернете. Для использования рекомендуем вам сделать плату с выведенными линиями питания, Rx и Tx. Подключение к Arduino необходимо производить в следующем порядке:
- вывод Arduino 3.3В или (5В через стабилизатор!) — к 12 пину модуля Bluetooth
- вывод Arduino GND — к 13 пину модуля Bluetooth
- вывод Arduino TX — к 2 пину модуля RX Bluetooth
- вывод Arduino RX — к 1 пину модуля TX Bluetooth
После подключения необходимо проверить работоспособность Bluetooth модуля. Подключим Светодиод к 12 выводу Arduino и загрузим на плату следующий скетч:
char incomingByte; // входящие данные int LED = 12; // LED подключен к 12 пину void setup() { Serial.begin(9600); // инициализация порта pinMode(LED, OUTPUT); //Устанавливаем 12 вывод как выход Serial.println(“Press 1 to LED ON or 0 to LED OFF…”); } void loop() { if (Serial.available() > 0) { //если пришли данные incomingByte = Serial.read(); // считываем байт if(incomingByte == '0') { digitalWrite(LED, LOW); // если 1, то выключаем LED Serial.println(“LED OFF. Press 1 to LED ON!”); // и выводим обратно сообщение } if(incomingByte == '1') { digitalWrite(LED, HIGH); // если 0, то включаем LED Serial.println(“LED ON. Press 0 to LED OFF!”); } } }
Теперь скачиваем из Play Market программу Bluetooth-терминал и устанавливаем его. Включаем нашу Arduino. В приложении Нажимаем кнопку меню->Connect a device-Secure.
Тем самым ваше устройство начнём искать Bluetooth поблизости. Наш модуль должен называться HC-05.
Вам потребуется выписать его MAC-адрес, так он понадобится в дальнейшем. Как только он обнаружит устройство HC-05 выберите его. Пароль, если потребуется: 1234 (это стандартный код).
После того как вы подключились к нему у вас должно вывести сообщение которое пришло в Bluetooth терминал от Arduino: “Press 1 to LED ON or 0 to LED OFF..” Далее введите 1 и нажмите отправить. Тем самым вы посылаете цифру 1 через Bluetooth на Arduino.
Как только он примет цифру 1 должен загореться светодиод подключенный к 12 выводу Arduino. После введите цифру 0 и светодиод должен погаснуть. Если всё получилось переходим дальше.
Установка Android SDK
Скачиваем с официального сайта программу для создания приложений для android любых моделей. Распаковываем архив, запускаем SDK Manager.exe и устанавливаем программу. Вам предложат установить API, и версию android для которой вы в дальнейшем будете устанавливать приложения.
Android SDK Manager
После нажимаем кнопку Install, ждём когда завершиться установка и закрываем окно.
Заходим в саму программу, она находиться в папке eclipse/eclipse.exe. После открытия программы в диалоговом окне необходимо указать директорию для хранения будущих проектов. Лучше создавать папку на локальном диске, используя при этом только латинские буквы.
Создание приложения
Выбираем File->New->Project.
Так как мы создаём приложение для android, выбираем Android-> Android Application Project, и нажимаем Next
Следующее диалоговое окно:Application Name -> пишем имя приложение, Project Name -> пишем имя проекта, Package Name -> Ни чего не пишем он создается автоматически! Minimum Required SDK -> это минимальные требование указываем нашу версию Android у меня 4.1 её я и выбираю.
Target SDK -> выбираем вашу версию Android Compile with -> выбираем вашу версию Android Theme: для начала я бы советовал выбрать None. Нажимаем Next. В следующем окне ничего менять не нужно. Просто жмем Next.
Далее нам предлагают создать свою иконку для приложения, можете изменить стандартный ярлык загрузив свою картинку, я же для начала предлагаю просто нажать Next.В следующем необходимо выбрать пункт меню Blank Activity и нажимать Next.Жмем Finish и через несколько секунд открывается главное окно нашей программы. Выбираем вкладку Activity_main.
xml и видим наш редактор:
- Файлы нашего проекта.
- Run Запуск эмулятора для проверки программы на наличие ошибок
- Панель кнопок текста и многое другое от сюда вы будите выбирать что вам нужно и добавлять в качестве элементов приложения
- Для выбора размера дисплея вашего телефона или планшета
- Выбор ориентации.
Два вида: горизонтальный и вертикальный
- API уровень (лучше не трогать)
- Тут будет отображаться всё то что вы добавили в приложение, так же тут можно переименовать ваши добавленные элементы или удалять их.
- Показывает свойства элемента, его размер цвет и т.д., так же тут можно редактировать элемент
- Показывает наличие ошибок.
- Выбор редактирования (графический либо текстовой). Для начинающих конечно лучше пользоваться графическим режимом
- Окно вашего приложения , можно видеть интерфейс будущего приложения
Теперь добавим две кнопки в интерфейс приложения. Выбираем элемент Button и переносим его на форму.
Справа вверху мы видим объекты которые мы добавили. Так же важно, какой из объектов выбран в данный момент. Справа внизу можно редактировать кнопку, давайте изменим текст подписи кнопки и его цвет. Для этого в поле свойств элемента «Text» введите, вместо button1, значение «ВКЛ», а у button2 — “ВЫКЛ”. Должно получиться вот так:
Мы можем запустить только что созданное приложение на эмуляторе. Идем в настройки запуска «Run» → Run Configurations», в левой части нажимаем на «Android Application». Появляется новая конфигурация «New_configuration».
В правой части окна выбираем вкладку «Target» и выбираем опцию «Launch on all compatible devices/AVD» и добавляем устройство. Проверяем что кнопки появились и их можно нажимать. Если всё хорошо — продолжаем дальше.
Теперь в файлах проекта выбираем bin->AndroidManifest.hmlТеперь нажмём снизу на AndroudManifest.
hml
В этот файл нам нужно будет добавить две строки:
Они будут запрашивать включение Bluetooth при старте приложение, если он будет выключен приложение попросит пользователя его включить. Добавить его нужно сюда:
Далее откроем другой файл: src->com.example(name)
В этом файле и будет наш основной код. Все его содержимое нужно удалить и вставить вот этот код:package com.example.NAME;//Вместо NAME введите имя вашего проекта import java.io.IOException; import java.io.OutputStream; import java.util.UUID; import com.example.NAME.R; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG = “bluetooth1”; Button button1, button2;//Указываем id наших кнопок private static final int REQUEST_ENABLE_BT = 1; private BluetoothAdapter btAdapter = null; private BluetoothSocket btSocket = null; private OutputStream outStream = null; // SPP UUID сервиса private static final UUID MY_UUID = UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”); // MAC-адрес Bluetooth модуля private static String address = “00:00:00:00:00”; //Вместо “00:00” Нужно нудет ввести MAC нашего bluetooth /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button) findViewById(R.id.button1); //Добавляем сюда имена наших кнопок button2 = (Button) findViewById(R.id.button2); btAdapter = BluetoothAdapter.getDefaultAdapter(); checkBTState(); button1.setOnClickListener(new OnClickListener() //Если будет нажата кнопка 1 то { public void onClick(View v) { sendData(“1”); // Посылаем цифру 1 по bluetooth Toast.makeText(getBaseContext(), “Включаем LED”, Toast.LENGTH_SHORT).show(); //выводим на устройстве сообщение } }); button2.setOnClickListener(new OnClickListener() { public void onClick(View v) { sendData(“0”); // Посылаем цифру 1 по bluetooth Toast.makeText(getBaseContext(), “Выключаем LED”, Toast.LENGTH_SHORT).show(); } }); } @Override public void onResume() { super.onResume(); Log.d(TAG, “…onResume – попытка соединения…”); // Set up a pointer to the remote node using it's address. BluetoothDevice device = btAdapter.getRemoteDevice(address); // Two things are needed to make a connection: // A MAC address, which we got above. // A Service ID or UUID. In this case we are using the // UUID for SPP. try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e) { errorExit(“Fatal Error”, “In onResume() and socket create failed: ” + e.getMessage() + “.”); } // Discovery is resource intensive. Make sure it isn't going on // when you attempt to connect and pass your message. btAdapter.cancelDiscovery(); // Establish the connection. This will block until it connects. Log.d(TAG, “…Соединяемся…”); try { btSocket.connect(); Log.d(TAG, “…Соединение установлено и готово к передачи данных…”); } catch (IOException e) { try { btSocket.close(); } catch (IOException e2) { errorExit(“Fatal Error”, “In onResume() and unable to close socket during connection failure” + e2.getMessage() + “.”); } } // Create a data stream so we can talk to server. Log.d(TAG, “…Создание Socket…”); try { outStream = btSocket.getOutputStream(); } catch (IOException e) { errorExit(“Fatal Error”, “In onResume() and output stream creation failed:” + e.getMessage() + “.”); } } @Override public void onPause() { super.onPause(); Log.d(TAG, “…In onPause()…”); if (outStream != null) { try { outStream.flush(); } catch (IOException e) { errorExit(“Fatal Error”, “In onPause() and failed to flush output stream: ” + e.getMessage() + “.”); } } try { btSocket.close(); } catch (IOException e2) { errorExit(“Fatal Error”, “In onPause() and failed to close socket.” + e2.getMessage() + “.”); } } private void checkBTState() { // Check for Bluetooth support and then check to make sure it is turned on // Emulator doesn't support Bluetooth and will return null if(btAdapter==null) { errorExit(“Fatal Error”, “Bluetooth не поддерживается”); } else { if (btAdapter.isEnabled()) { Log.d(TAG, “…Bluetooth включен…”); } else { //Prompt user to turn on Bluetooth Intent enableBtIntent = new Intent(btAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } } } private void errorExit(String title, String message){ Toast.makeText(getBaseContext(), title + ” – ” + message, Toast.LENGTH_LONG).show(); finish(); } private void sendData(String message) { byte[] msgBuffer = message.getBytes(); Log.d(TAG, “…Посылаем данные: ” + message + “…”); try { outStream.write(msgBuffer); } catch (IOException e) { String msg = “In onResume() and an exception occurred during write: ” + e.getMessage(); if (address.equals(“00:00:00:00:00:00”)) msg = msg + “.
В переменной address у вас прописан 00:00:00:00:00:00, вам необходимо прописать реальный MAC-адрес Bluetooth модуля”; msg = msg + “.
Проверьте поддержку SPP UUID: ” + MY_UUID.toString() + ” на Bluetooth модуле, к которому вы подключаетесь.
“; errorExit(“Fatal Error”, msg); } } }
ОБЯЗАТЕЛЬНО! Введите вместо 00:00:00:00:00 МАС вашего Bluetooth модуля, который можно узнать через Bluetooth терминал!!!
Ваше приложение готово.
Теперь нам нужно проверить, как оно поведёт себя на устройстве. Запустите для этого симулятор. Если он запустился нормально без ошибок, то в папке, где вы создавали свой проект, будет создан файл с вашей программой.
Его необходимо скопировать и установить на свое устройство.
Работа приложения
При нажатии на кнопку “Вкл” ваше Android-устройство передаст через Bluetooth цифру 1 и, как только Arduino примет цифру 1, светодиод загорится. При нажатии на кнопку “Выкл” передается цифра 2 и светодиод выключится, как показано на видео в начале статьи. Всё просто))
Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.
Источник: http://www.customelectronics.ru/sozdaem-android-prilozhenie-dlya-upravleniya-domashnim-robotom-cherez-bluetooth/
Как начать программировать с Arduino
Вам понадобится
- – плата Arduino UNO,
- – кабель USB (USB A – USB B),
- – персональный компьютер,
- – светодиод,
- – резистор 220 Ом,
- – пара проводов 5-10 см,
- – при наличии – макетная плата (breadboard).
Инструкция
Подключите плату Arduino с помощью USB кабеля к компьютеру. Должен загореться зелёный светодиод ON на плате.Загрузите среду разработки Arduino для своей операционной системы (поддерживаются ОС Windows, Mac OS X, Linux) на странице http://arduino.cc/en/Main/Software, можно установщик, можно архив. Скачанный файл содержит также и драйверы для плат Arduino.
Установите драйвер.
Рассмотрим вариант для ОС Windows. Для этого дождитесь, когда операционная система предложит установить драйвер. Откажитесь. Нажмите Win + Pause, запустите Диспетчер устройств. Найдите раздел “Порты (COM & LPT)”. Увидите там порт с названием “Arduino UNO (COMxx)”. Кликните правой кнопкой мыши на нём и выберите “Обновить драйвер”.
Далее выбираете расположение драйвера, который вы только что скачали.
Среда разработки уже содержит в себе множество примеров для изучения работы платы. Откройте пример “Blink”: Файл > Примеры > 01.Basics > Blink.
Укажите среде разработки свою плату. Для этого в меню Сервис > Плата выберите “Arduino UNO”.
Выберите порт, которому назначена плата Arduino. Чтобы узнать, к какому порту подключена плата, запустите диспетчер устройств и найдите раздел Порты (COM & LPT). В скобках после названия платы будет указан номер порта. Если платы нет в списке, попробуйте отключить её от компьютера и, выждав несколько секунд, подключить снова.Отключите плату от компьютера.
Соберите схему, как показано на рисунке. Обратите внимание, что короткая ножка светодиода должна быть соединена с выводом GND, длинная через резистор с цифровым пином 13 платы Arduino. Удобнее пользоваться макетной платой, но при её отсутствии можно соединить провода скруткой.
Важное примечание! Цифровой пин 13 уже имеет свой резистор на плате.
Поэтому при подключении светодиода к плате внешний резистор использовать не обязательно. При подключении светодиода к любым другим выводам Ардуино использование токоограничивающего резистора обязательно!Теперь можно загрузить программу в память платы. Подключите плату к компьютеру, подождите несколько секунд, пока происходит инициализация платы.
Нажмите кнопку “Загрузить”, и Ваш скетч запишется в память платы Arduino. Программирование под Arduino весьма интуитивно и совсем не сложно. Посмотрите на изображение – в комментариях к программе есть небольшие пояснения. Этого достаточно чтобы разобраться с вашим первым экспериментом.
Светодиод должен начать весело подмигивать вам с периодичностью 2 секунды (1 секунду горит, 1 выключен). Ваш первый скетч готов!
Обратите внимание
Будьте внимательны при работе с платой Arduino – это электронное изделие, которое требует бережного отношения. Снизу платы есть оголённые проводники, и если Вы положите плату на токопроводящую поверхность, есть вероятность сжечь плату. Также не трогайте плату влажными или мокрыми руками и избегайте при работе сырых помещений.
Полезный совет
В сети есть множество сайтов, посвящённых Arduino. Читайте, осваивайте, не бойтесь экспериментировать и познавать новое!
Источники:
Программирование не отнесешь к умениям, освоить которые проще простого. При отсутствии математического таланта и постоянной работы над развитием своих способностей, вряд ли вы сможете научиться быстро программировать. Для приобретения этого навыка придется приложить немало усилий.
Инструкция
Постоянно тренируйте память. Это поможет вам развивать свои способности по программированию – ускорить процесс осознания требований и целей написания, научиться в короткие сроки обобщать весь массив требуемой информации и рассматривать все возможные варианты обеспечения работоспособности готовой программы. Программисты мыслят особым образом.
Они стараются упорядочить и структурировать полученные данные, как можно более быстро провести анализ и сделать полезные для дальнейшей работы выводы. Решайте кроссворды и логические головоломки, читайте книги и играйте в шахматы, чтобы укрепить память и развить способность быстро и продуктивно мыслить.
Лучший способ научиться быстро программировать – это постоянная практика, даже если познания в этой области весьма и весьма скромные. Начните с написания базовых, легких программ. Ценный опыт и умение применять познания на практике невозможны без неоднократных проб и исправления собственных ошибок. Тогда обучение умению быстро программировать даст качественные результаты.
Даже квалифицированному специалисту с большим стажем работы требуется постоянно повышать производительность собственного труда и ускорять процесс написания программ.Пользуйтесь опытом коллег. Общение с другими программистами – тоже своего рода обучение. Практическое обучение куда быстрее, нежели изучение одной лишь теории.
Советуйтесь с ними по поводу рационализации процесса программирования, читайте их программы и обсуждайте написание собственных. Так вы узнаете о нюансах программирования гораздо больше и научитесь программировать быстрее. К тому же, советы коллег помогают самосовершенствоваться и взглянуть на собственные ошибки со стороны, что бывает весьма полезно для развития.
В жизни начинающего ардуинщика рано или поздно наступает момент, когда хочется сэкономить на размере своего изделия, не жертвуя при этом функциональностью. И тогда Arduino Pro Mini – отличное решение! Эта плата за счёт того, что у неё отсутствует встроенный USB-разъём, в полтора раза меньше Arduini Nano.
Но для того, чтобы её запрограммировать, придётся приобрести дополнительный – внешний – USB-программатор. О том, как “залить” написанную программу в память микроконтроллера и заставить Arduino Pro Mini работать, и пойдёт речь в этой статье.
Вам понадобится
- – Arduino Pro Mini;
- – компьютер;
- – USBASP-программатор;
- – соединительные провода.
Инструкция
Сначала пара слов о самом программаторе. Купить такой можно за 2 доллара в любом китайском интернет-магазине.Разъём типа USB-A используется, понятно, для подключения программатора к компьютеру.ISP-соединитель нужен для подключения к программируемой плате.Джампер JP1 контролирует напряжение на VCC выводе ISP-коннектора. Оно может быть 3,3 В или 5 В.
Если целевое программируемое устройство имеет собственный источник питания, нужно убрать перемычку.Джампер JP2 используется для перепрошивки самого программатора; в данной статье не рассматривается.Перемычка JP3 нужна, если тактовая частота целевого устройства ниже 1,5 МГц.
Два светодиода показывают: G – питание подаётся на программатор, R – программатор соединён с целевым устройством.
Подключим программатор к USB-порту компьютера. Скорее всего, через какое-то небольшое время операционная система сообщит, что ей не удалось найти драйвер для данного устройства.
В этом случае скачаем драйвер для программатора с официального сайта http://www.fischl.de/usbasp/. Распакуем архив и установим драйвер стандартным способом. В диспетчере устройств должен появиться программатор USBasp.
Теперь программатор готов к работе. Отключаем его от компьютера.
Далее нужно соединить плату Ардуино Про Мини с программатором. Приведённая схема показывает, как это сделать.
Воспользуемся макетной платой и соединительными проводами – это будет быстро и надёжно. Соединяем разъём программатора с выводами на Arduino Pro Mini согласно приведённой выше схеме.
Открываем среду разработки Arduino IDE. Выбираем нужную плату через меню: Инструменты -> Плата -> Arduino Pro or Pro Mini (Tools -> Board -> Arduino Pro or Pro Mini).
Нужно также выбрать тип микроконтроллера, который задаётся через меню Инструменты -> Процессор. У меня это ATmega 168 (5V, 16 MHz). Данные параметры обычно написаны на корпусе микроконтроллера.
Выберем тип программатора: Инструменты -> Программатор -> USBasp (или Tools -> Programmer -> USBasp).
Откроем скетч, который хотим загрузить в память микроконтроллера. Для примера пусть это будет мигание светодиодом: Файл -> Образцы -> 01. Basics -> Blink. Подключаем программатор с подключённым к нему Arduino Pro Mini к компьютеру.
Теперь, для того чтобы загрузить скетч в Ардуино с помощью программатора, можно поступить несколькими способами.
1) Через меню Файл -> Загрузить через программатор;2) используя сочетание клавиш Ctrl + Shift + U;3) зажав клавишу Shift, нажать на кнопку со стрелкой вправо, которая обычно используется для загрузки скетча в память Ардуино стандартным способом.
Всё, программа “залита” в память микроконтроллера.
Обратите внимание
Возможно, IDE вам выдаст предупреждение: “warning: cannot set sck period. please check for usbasp firmware update.” Не паникуйте, скетч всё равно записался в память микроконтроллера и будет работать.
Источник: https://www.kakprosto.ru/kak-834668-kak-nachat-programmirovat-s-arduino
Машинка на Arduino, управляемая Android-устройством по Bluetooth, — полный цикл (часть 1)
Подробная история того, как из трех двигателей была собрана машина на Arduino, управляемая Android-устройством по Bluetooth. В нескольких десятках абзацев постараюсь максимально пошагово изложить, куда подключить каждый из проводов, как написать фирменное приложение и на каких детских граблях пришлось попрыгать больше недели.
Немного об уровне, авторе и предостережения
Я, автор, пацан 16-17 лет с подмосковной деревни, специализируюсь на написании android-приложений (а там сложнее что-то сжечь), поэтому ответственность за оптимальный подход к решению задач с себя снимаю.
Практически каждый из нижеописанных этапов занимал у меня больше, чем стоило бы, времени. Наверно, именно по этой причине хочу поделиться опытом. И при этом буду очень рад, если поругаете за ошибки и подскажите за оптимизацию.
Задача
Задача легчайшая – заставить ездить машинку, управляемую Arduino, а пульт заменить андроидом. Но в большинстве моментов пришлось изобретать колесо, потому что в интернетах подходящего решения найдено не было.
Понадобится
- Arduino
- Motor Shield (в моем случае две)
- Bluetooth
- Android
- Провода обычные
Основа конструкции
За основу была взята машина Lego Outdoor Challenger (в реальности выглядит менее пафосно). Все, что от нее осталось: корпус (все элементы украшения сняты) и три двигателя.
У машинки была своя плата, но одна из задач подразумевала универсальность: это сделал я, это смогут повторить другие. Мозги вынул, поставил Arduino Uno.
Установка Arduino
Создатели почему-то не предусмотрели места для Arduino, потому крепил на шурупы, просверлив пластик. Под плату подложил фанеру, чтобы ничего не закоротило. Под шурупы лучше подсунуть что-то пластиковое (кусочек бутылки), ибо плата от железный болтов не защищена.
Поверх платы сразу поставил две motor shiled, так надо. Чтобы управлять второй, придется прокинуть один провод с любого digital порта на H1 (направление) и второй с пина с поддержкой шима (помечены знаком «~», обычно 10, 11) на E1 (скорость).
Определение угла поворота
За поворот машинки отвечает на удивление не сервопривод, а обычный двигатель. Встает проблема: хорошо бы было его не сжечь, ведь угол поворота ограничен, а крутиться двигатель может сколько угодно.
Вариант с методом тыка отпадает, так как при разном уровне батареи количество тока, подаваемое на двигатель, будет изменяться, что приведет к постоянно меняющемуся углу. Крутить до упора тоже нельзя, рано или поздно рассыплются шестеренки.
Решение проблемы: отслеживать угол через замыкание. На фото продемонстрирована небольшая штучка, которая крепится недалеко от поворотного механизма. На часть, которая крутится вместе с колесами влево/вправо двигателем, прикрепляется гребешок с железными контактами.
Принцип работы: к каждой линии припаивается провод (всего их четыре), нижний подключается к плюсу (он зажат гребешком всегда, см. картинку), остальные провода уходят на минус. Когда зубик гребешка попадает и на нижний ряд, и на, допустим, третий, происходит замыкание, ток течет, это замечает Arduino.
Благодаря различным комбинациям трех полос, можно определить до семи углов. Например, когда ток есть на всех линиях, колеса повернуты в крайнее правое положение, когда ток есть только на верхней, колеса повернуты максимально влево. В таблице предоставлены все варианты.
Подключение угла и код
Для каждого уровня был выбран свой цвет: нижний – зеленый, первый снизу – красный, второй – черный, третий – белый. На начальном этапе использовались breadboard и светодиоды для визуальной отладки.
Схема подключения показана на рисунке. Плюс тянем к зеленому, остальные протягиваем к минусу. Через резистор, установленный для устранения помех и отсутствия КЗ, подключаем провода к выходам A0-A2. Выбраны они просто из экономии остальных портов.
Код дан с комментариями. Подключаем пины и опрашиваем их через digitarRead(). Если напряжение есть, вернется значение true. Далее смотрим, если результат означает, что колеса в крайних положениях, запрещаем дальнейший поворот в эту сторону.
Небольшая хитрость: поскольку выходы на 5В и 3.3В понадобятся в будущем, можно поставить плюс на один из digital-пинов. Перед каждой проверкой угла выдавать ток через digitalWrite(whitePin), потом проверять угол и убирать ток.
int speedTurn = 180; //скорость поворота, от 0 до 255 //пины для определения поворота
int pinRed = A0;
int pinWhite = A1;
int pinBlack = A2; int pinAngleStop = 12; //выводит ток на светодиод, если достигнут максимальный угол, нужен //только для отладки void setup() { //пины поворота на считывание pinMode(pinRed, INPUT); pinMode(pinBlack, INPUT); pinMode(pinWhite, INPUT);
//светодиод pinMode(pinAngleStop, OUTPUT);
//пины драйвера двигателя, направление и скорость pinMode(angleDirection, OUTPUT); pinMode(angleSpeed, OUTPUT); Serial.begin(9600);
}
//функция вызывается из loop(), когда приходит команда с андроида
void turn(int angle) { digitalWrite(pinAngleStop, HIGH); //выдаем ток на провод, подключенный к плюсу delay(5); //немного ждем, чтобы ток “успел” дойти if(angle > 149) { if( digitalRead(pinWhite) == HIGH && digitalRead(pinBlack) == LOW && digitalRead(pinBlack) == LOW) { //если достигнуто крайне правое положение, выйти из функции не подавая ток, чтобы не //сжечь мотор return; } //если угол не максимальный, поворачиваем digitalWrite(angleDirection, HIGH); analogWrite(angleSpeed, speedTurn); } else if (angle < 31) { if(digitalRead(pinRed) == HIGH && digitalRead(pinBlack) == HIGH && digitalRead(pinWhite) == HIGH) { //если достигнуто крайне левого положение, выйти из функции не подавая ток, чтобы не //сжечь мотор return; } //если угол не максимальный, поворачиваем digitalWrite(angleDirection, LOW); analogWrite(angleSpeed, speedTurn); } digitalWrite(pinAngleStop, LOW); //убираем ток с определителя угла delay(5); }
Распараллеливание ходовых колес
Изначально два ходовых двигателя соединены вместе. Их рассоединил по двум причинам: поворот эффективней, если колеса крутятся в разные стороны, и два мощных двигателя одна плата не вытянет.
Проблема: у motor shield два выхода, каждый из которых выдает до 2 ампер. Каждый двигатель ест по 0,7А. Вроде меньше, но не при максимальных нагрузках. Допустим, машинка застряла в песке или уперлась, ток возрастает выше ампера. Не критично, но потенциально опасно.
А вот критичным оказалось то, что плата греется. Через минуты полторы после заезда, motor shield нагревалась и начинала работать безобразно: токи подаются не те, колеса не крутятся и прочее.
Решение обоих проблем: один двигатель подключил к одной motor shield, второй – к другой. Как ни странно, помогло. Температура упала, перегрев отсутствует. Можно было поставить радиатор, но крепить тяжело.
Подключение Bluetooth
Я использовал модель HC-05, что сыграло роковую шутку. Подключаются все блютузы одинаково: один провод на 3.3В (иногда начинал работать только от 5В), второй на минус, еще два на порт 0 и 1 (чтение и отправка соответственно). Провод, подписанный RXD на bluetooth, втыкается в TXD ардуино, а TXD в RXD (если перепутаете, то данных не увидите).
Есть оговорка: порты 0 и 1 по умолчанию используются Serial, через который заливает скетч. То есть, пока воткнут блютуз, скетч не зальется. Есть два выхода: вынимать блютуз на время заливки или переназначить входы и выходы блютуза. Второй вариант осуществляется двумя строчками
#include подключение библиотеки
SoftwareSerial BTSerial(8, 9); установка 8 и 9 пина заместо 0 и 1
Подводный камень, съевший у меня трое суток работы – скорость общения. По привычке установил 9600 и пошел пробовать. То данные не приходили, то была каша символов. И в конце концов ответ – модель HC-05 общается на 38400! Очень сильно обратите внимание на то, что в Setup() я выполню BTSerial.begin(39400), хотя Serial.begin(9600).
Система отправки команд
Статья становится слишком длинной, поэтому рассмотрение кода Arduino и Android вынесу в отдельную вторую часть, а сейчас опишу принцип.
На андроид устройстве есть джойстик (круг, о реализации которого также во второй части).
Андроид считывает показания с него и конвертирует их в подходящие для ардуино числа: скорость из пикселей превращает в значение от -255 до 255 (отрицательные – задний ход), а также определяет угол.
Я сознательно отдал эту задачу телефону, так как он куда мощнее и спокойно справится с подсчетом нескольких сотен значений в секунду.
После установки сокета данные отправляются в следующем формате: @скорость#*угол#. @ — говорит о том, что следующие цифры содержат скорость, # — извещает об окончании значения скорости, * — начало значения угла, # — закончить запись угла. Цикл бесконечен, команды отправляются каждые 100 миллисекунд (цифра подобрана оптимальная). Если ничего не нажато на андроиде, то ничего и не отправляется.
Алгоритм приема данных подробно описан в коде скетча. Он не раз переписывался и, как по мне, работает идеально.
Заключение первой части
В этой статье я попытался раскрыть все, что касается физической части машинки. Вероятнее всего, что-то упустил, так что обязательно спрашивайте.
Но самое интересное, как по мне, осталось на второе – программа Arduino и приложение на Android, там творится настоящая магия, по крайней мере, для молодого меня.
Если вы не найдете ответа на какую-то часть и захотите потыкать меня в недостатки лично, жду – dendolg1@mail.ru, .
Источник: http://www.pvsm.ru/java/293544
Программирование Ардуино С Андроид Устройств. Смартфона И Планшета. Есть Ли Смысл
04:10
Программирование Ардуино С Андроид Устройств. Смартфона И Планшета. Есть Ли Смысл
19:23
16 Лучших Arduino Проектов Alexgyver
06:57
Bluetooth Модули. Управление Со Смартфона
02:57
5 Популярных Игр И Их Языки Программирования
09:16
Program Arduino With Android Smartphone
04:56
40 Датчиков И Модулей Arduino
22:44
Что Можно Подключить К Планшету
10:03
Источник: https://www.e-muzik.org/p/programmirovanie-arduino-s-android-ustrojstv-smartfona-i-plansheta-est-li-smysl-N0FyVEJBalpmVDQ
Книги по Ардуино
В этой статье я собрал для вас самые популярные книги по проектированию устройств на базе микроконтроллеров Ардуино. Прочитав одну из этих книг вы сможете создавать умные гаджеты и системы автоматизации.
Начиная от простых устройств, отображающих значения датчиков, и заканчивая системами умного дома или ЧПУ станками. Все это можно сделать и без прочтения книг, но тогда это займет гораздо больше времени, сил и денег.
В книгах рассмотрены общие понятия электротехники, принципы действия микроконтроллеров и подключаемых датчиков и механизмов.
Скачать книги по ардуино на русском языке
Ниже представлены 5 самые популярные книги по Arduino. Советую прочитать, если не все, то хотя бы первую из них. Среди этих книг есть книги как для начинающих, так и для людей уже знакомых с темой ардуино. Любой сможет найти для себя, что то новое и полезное. Все книги ниже переведены на русский язык.
Изучаем Arduino. Джереми Блум
Данная книга описывает аспекты и принципы проектирования устройств с помощью Arduino. Рассказывает об аппаратной и программной части Ардуино. В этой книге объясняются принципы программирования в среде Arduino IDE.
Показано, как правильно читать технические описания, подбирать детали для собственных проектов и как анализировать электрические схемы готовых устройств. Так же в книге описаны примеры использования разнообразных датчиков, индикаторов, разных интерфейсов передачи данных и исполнительных механизмов.
Для всех примеров в книге есть перечисление необходимых деталей, монтажные схемы, примеры кода с полным описанием.
Джереми Блум Изучаем Arduino- инструменты и методы технического волшебства (2015)
Проекты с использованием контроллера Arduino. Петин В.А
Проекты с использованием контроллера Arduino
В этой книге основное внимание уделено практической части создания собственных устройств на базе микроконтроллеров ардуино. Приведены схемы подключения, подробное описание логики программной части, список необходимых датчиков и модулей. Эта книга предназначена для тех кто уже имеет представление о том что такое ардуино и знаком с основными функциями языка программирования ардуино.
Проекты с использованием контроллера Arduino. Петин В.А.
Программируем Arduino. Саймон Монк
Программируем Arduino. Саймон Монк
Данное издание посвящено программированию микроконтроллеров на базе Arduino. В книге рассмотрены примеры скетчей и принципы написания своих прошивок.
Изучив этот материал вы сможете писать прошивки для самых сложных устройств, включающих в себя множество технических элементов. Так же в книге рассмотрены популярные библиотеки для удобной работы в Arduino IDE.
Страница программирование Ардуино поможет разобраться и запомнить основные функции и конструкции языка программирования Arduino.
Программируем Arduino. Саймон Монк
Arduino и Raspberry Pi в проектах Internet of Things. Виктор Петин
>Arduino и Raspberry Pi в проектах Internet of Things
Описание: Рассмотрено создание простых устройств в рамках концепции Интернета вещей (IoT, Internet of Things) на базе популярной платформы Arduino и микрокомпьютера Raspberry Pi. Показана установка и настройка среды разработки приложений Arduino IDE, а также среда макетирования Frizing.
Описаны технические возможности, особенности подключения и взаимодействия различных датчиков и исполнительных устройств. Показана организация доступа разрабатываемых проектов к сети Интернет, отправка и получение ими данных с использованием популярных облачных IoT сервисов: Narodmon, ThingSpeak, Xively, Weaved, Blynk, Wyliodrin и др.
Уделено внимание обмену данными с помощью платы GPRS/GSM Shield. Рассмотрен проект создания собственного сервера для сбора по сети данных с различных устройств на платформе Arduino. Показано как использовать фреймворк WebIOPi для работы с Raspberry Pi. Приведены примеры использования Wi-Fi-модуля ESP8266 в проектах “Умный дом”.
На сайте издательства размещен архив с исходными кодами программ и библиотек.
— Установка и настройка среды разработки приложений Arduino IDE и среды макетирования Frizing — Датчики и исполнительные устройста для Arduino и Raspberry Pi — Отправка и получение данных из IoT сервисов Narodmon, ThingSpeak, Xively, Weaved, Blynk, Wyliodrin — Создание Web-сервера для сбора данных с Android-устройств — Обмен данными с помощью платы GPRS/GSM Shield — Фраймфорк WebIOPi для работы с Raspberry Pi
— WiFi-модуль ESP8266 в проектах “Умный дом”
Arduino и Raspberry Pi в проектах интернета вещей
Практическая энциклопедия Arduino
Практическая энциклопедия Arduino
В книге обобщаются данные по основным компонентам конструкций на основе платформы Arduino, которую представляет самая массовая на сегодняшний день версия ArduinoUNO или аналогичные ей многочисленные клоны. Книга представляет собой набор из 33 глав-экспериментов. В каждом эксперименте рассмотрена работа платы Arduino c определенным электронным компонентом или модулем, начиная с самых простых и заканчивая сложными, представляющими собой самостоятельные специализированные устройства. В каждой главе представлен список деталей, необходимых для практического проведения эксперимента. Для каждого эксперимента приведена визуальная схема соединения деталей в формате интегрированной среды разработки Fritzing. Она дает наглядное и точное представление — как должна выглядеть собранная схема. Далее даются теоретические сведения об используемом компоненте или модуле. Каждая глава содержит код скетча (программы) на встроенном языке Arduino с комментариями.
Практическая энциклопедия ардуино
Быстрый старт. Первые шаги по освоению Arduino
Быстрый старт Arduino
Стартовый набор-конструктор c платой Arduino — Ваш пропуск в мир программирования, конструирования и электронного творчества. Эта брошюра содержит всю информацию для ознакомления с платой Arduino, а также 14 практических экспериментов с применением различных электронных компонентов и модулей.
Полученные знания, в дальнейшем, дадут возможность создавать свои собственные проекты и с легкостью воплощать их в жизнь.
Быстрый старт. Первые шаги по освоению Arduino
Источник: https://all-arduino.ru/knigi-po-arduino/