Arduino — аппаратная вычислительная платформа, основными компонентами которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wiring. Arduino может использоваться как для создания автономных интерактивных объектов, так и подключаться к программному обеспечению, выполняемому на компьютере (например, Adobe Flash, Processing, Max/MSP, Pure Data, SuperCollider). Рассылаемые в настоящее время версии могут быть заказаны уже распаянными. Информация об устройстве платы (рисунок печатной платы) находится в открытом доступе и может быть использована теми, кто предпочитает собирать платы самостоятельно. Микроконтроллеры ATmega328 дёшевы и стоят около 10$. Проект Arduino был удостоен почётного упоминания при вручении призов Prix Ars Electronica 2006 в категории Digital Communities.
Аппаратная часть
Плата Arduino состоит из микроконтроллера Atmel AVR (ATmega328 и ATmega168 в новых версиях и ATmega8 в старых), а также элементов обвязки для программирования и интеграции с другими схемами. На многих платах присутствует линейный стабилизатор напряжения +5В или +3,3В. Тактирование осуществляется на частоте 16 или 8 МГц кварцевым резонатором (в некоторых версиях керамическим резонатором). В микроконтроллер предварительно прошивается загрузчик BootLoader, поэтому внешний программатор не нужен.
На концептуальном уровне все платы программируются через RS-232 (последовательное соединение), но реализация этого способа отличается от версии к версии. Плата Serial Arduino содержит простую инвертирующую схему для конвертирования уровней сигналов RS-232 в уровни ТТЛ, и наоборот. Текущие рассылаемые платы, например, Diecimila, программируются через USB, что осуществляется благодаря микросхеме конвертера USB-to-Serial FTDI FT232R. В версии платформы Arduino Uno в качестве конвертера используется микроконтроллер Atmega8 в SMD-корпусе. Данное решение позволяет программировать конвертер так, чтобы платформа сразу определялась как мышь, джойстик или иное устройство по усмотрению разработчика со всеми необходимыми дополнительными сигналами управления. В некоторых вариантах, таких как Arduino Mini или неофициальной Boarduino, для программирования требуется подключение отдельной платы USB-to-Serial или кабеля.
Платы Arduino позволяют использовать большую часть I/O выводов микроконтроллера во внешних схемах. Например, в плате Diecimila доступно 14 цифровых входов/выходов, 6 из которых могут выдавать ШИМ сигнал, и 6 аналоговых входов. Эти сигналы доступны на плате через контактные площадки или штыревые разъемы. Также доступны несколько видов внешних плат расширения, называемых «shields» («щиты»), которые присоединяются к плате Arduino через штыревые разъёмы.
Программное обеспечение
Интегрированная среда разработки Arduino — это кроссплатформенное приложение на Java, включающее в себя редактор кода, компилятор и модуль передачи прошивки в плату.
Среда разработки основана на языке программирования Processing и спроектирована для программирования новичками, не знакомыми близко с разработкой программного обеспечения. Язык программирования аналогичен используемому в проекте Wiring. Строго говоря, это C++, дополненный некоторыми библиотеками. Программы обрабатываются с помощью препроцессора, а затем компилируется с помощью AVR-GCC.
Соединяем кнопку к контакту 2 которая будет использована как прерывание.
Sketch дает возможность светодиодам чтобы мигать поочередно.
Красный:
Зеленый:
Quote:
ÎnchideЗакрыть
Светодиодная новогодняя елка
Это месиво проводов и светодиодов является на самом деле далеким родственником новогодней елки. Правда, елки об этом пока не в курсе, но мы их спрашивать не будем.
Преследуемая цель — собрать быстро нечто новогодне-светящееся из минимум подручных материалов, которые есть у каждого.
Пролог
Копаясь по ящикам стола я набрел на горстку разноцветных светодиодов, которые были «непонятно зачем» (часть сленга моей жены) куплены на eBay.
Вечерело, за окном падал пушистый снег, камин уютно грел пятую точку… То есть, все распологало к тому, что бы взять паяльник и попросить вернуть соседа старый долг что-то такое праздничное и простенькое наваять.
В итоге мне удалось поймать за хвост идею сделать светодиодную елку на Arduino.
Идея
Идея, хоть, и была навеселе, но предложила мне следующий простой концепт: объединить несколько светодиодов в виде матрицы и на каркасе из одножильного провода типа 24 AWG соорудить что-то немного напоминающее елку.
Светодиоды соединены в четыре группы. Каждая группа состоит из трех светодиодов с общим катодом анодом катодом анодом (никак не могу запомнить кто из них кто).
Схема примерно такая (резисторы добавить по вкусу):
Ряды идут на цифровые выходы Arduino, группы я подсоединил на аналоговые выходы (по идее можно их тоже на цифровые, но у меня не было подходящих токоограничительных резисторов и я решил просто ограничивать яркость ШИМом на скорую руку).
То есть, когда у ряда на выходе 0, то можно управлять светодиодами в группе. Когда у ряда 1, то светодиоды терпеливо молчат и ждут своей очереди.
P.S.: Только я не что-то не смог придумать как аккуратно повесить один светодиод (белый?) в виде звезды сверху. Разве что просто отдельно повесить, но конструкция будет не очень устойчива. Оставлю это как домашнее задание для любопытного читателя. Предложения в комментариях приветствуются.
Нам понадобится
Желание и время заниматься этой ерундой
Горстка светодиодов (я использовал 5 мм светодиоды разных цветов — 3 красных, 3 желтых, 3 синих и 3 зеленых)
Arduino или любую другую подходящую плату с микроконтроллером (я использовать Arduino Fio так как ее удобно запитать от Lipo аккумулятора)
Одножильный провод для каркаса
Инструменты для пайки
Сборка
Для начала светодиоды я решил обработать наждачкой, так как хотелось что бы они немного рассеивали свет:
Фотик старый, руки дрожат, горизонт завален — к сожалению, это отразилось на всех фотках. Но надеюсь, что процесс передать получилось.
Саму сборку я начал с формирования и пайки отдельных рядов.
Нижний ряд имеет сторону примерно 60мм, средний ряд примерно 50мм, а верхний получился примерно 30мм.
Так выглядят отдельно собранные три ряда:
Напаиваем первую цепочку светодиодов и там самым формируя нашу «типа елку»:
Дальше уже проще. Вот тут уже напаяна вторая цепочка светодиодов (фотка с дальним родственником):
Таким образом напаиваем остальные светодиодные цепочки на каркас.
Проверка и код
Проверено на Arduino Mega2560, так как это единственная Arduino плата, которая согласилась на сей опасный эксперимент (все остальные куда-то попрятались когда узнали что я решил замутить):
Код
ÎnchideЗакрыть
Результат
После отладки и проверки я перенес все это безобразие на Arduino Fio с Lipo аккумулятором дабы придать некую законченность и мобильность конструкции:
#51 by MrDeath (Power User) (0 mesaje) at 2015-06-13 14:04:35 (492 săptămâni în urmă) - [Link]
#50 Vadimch1, ce anume te intereseaza ?
Mesaj util ?
Da0 puncte
#52 by MisterMX (◕ ◡ ◕) (0 mesaje) at 2015-06-20 15:16:00 (491 săptămâni în urmă) - [Link]
#50 Vadimch1, este este
Mesaj util ?
Da0 puncte
#53 by Vadimch1 (Power User) (0 mesaje) at 2015-06-20 22:07:16 (491 săptămâni în urmă) - [Link]
#52 MisterMX, am aceasta bucata de cod:
Code
#include <RemoteReceiver.h>
void setup() {
RemoteReceiver::init(0, 3, showCode);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
pinMode(12, OUTPUT);
digitalWrite(12, LOW);
pinMode(11, OUTPUT);
digitalWrite(11, LOW);
pinMode(10, OUTPUT);
digitalWrite(10, LOW);
}
void loop() {}
void showCode(unsigned long receivedCode, unsigned int period)
{
if (receivedCode == 144532) digitalWrite(13, HIGH);
else if (receivedCode == 144534) digitalWrite(13, LOW);
else if (receivedCode == 530952) digitalWrite(12, HIGH);
else if (receivedCode == 530948) digitalWrite(12, LOW);
else if (receivedCode == 531276) digitalWrite(11, HIGH);
else if (receivedCode == 531272) digitalWrite(11, LOW);
else if (receivedCode == 531384) digitalWrite(10, HIGH);
else if (receivedCode == 531380) digitalWrite(10, LOW);
}
Se poate cumva de pus o conditie ca dupa 30 secunde sa deconecteze pinul care este HIGH ?
Mesaj util ?
Da0 puncte
#54 by MrDeath (Power User) (0 mesaje) at 2015-06-21 22:15:49 (491 săptămâni în urmă) - [Link]
poti face cu for sau while si deja sa te joci cu delay
Mesaj util ?
Da0 puncte
#55 by MisterMX (◕ ◡ ◕) (0 mesaje) at 2015-06-22 23:50:22 (491 săptămâni în urmă) - [Link]
#54 MrDeath, "... sa te joci cu delay ..." - nu trebuie de jucat cu delay, delay blocheaza toata programa in acele 30 sec, cel mai bine e sa ai o variabile cu timpul cind a fost pus high pinul si in loop sa controlezi timpul actual (cu millis) si timpul cind a fost pus HIGH pinul, daca diferenta este mai mare de 30 s il deconectezi.
In cazul tau poti face un array de timpuri si asa poti sa pui high mai multe pinuri indipendente
Mesaj util ?
Da1 puncte
#56 by Vadimch1 (Power User) (0 mesaje) at 2015-11-06 21:02:25 (471 săptămâni în urmă) - [Link]
Buna tuturor, poate cineva sa ma ajute cu o anumita problema..
Folosesc o placa arduino si vreau sa o combin cu C#. Cind becul de pe pinul 13 se aprinde sa afiseze un mesaj in aplicatia mea DE exemplu Becul este aprins.
Becul eu il aprind printr=un ultrasunet....
Asta e codul pt arduino dar pt C# nustiu cum sa fac aceasta legatura.. Va rog sa ma ajutati.
int maximumRange = 50; // Maximum range needed
//int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}
void loop() {
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
//Calculate the distance (in cm) based on the speed of sound.
distance = duration/58.2;
if (distance <= maximumRange){
/* Send a negative number to computer and Turn LED ON
to indicate "out of range" */
//Serial.println("-1");
Serial.println("Hello!!!");
Serial.println(distance);
digitalWrite(LEDPin, HIGH);
}
else {
/* Send the distance to the computer using Serial protocol, and
turn LED OFF to indicate successful reading. */
Serial.println("Nobody is here");
Serial.println(distance);
digitalWrite(LEDPin, LOW);
}
//Delay 50ms before next reading.
delay(50);
}
Mesaj util ?
Da0 puncte
#65 by Tmax (User) (0 mesaje) at 2016-03-20 09:27:18 (452 săptămâni în urmă) - [Link]
const char *ssid = "mywifi"; // You will connect your phone to this Access Point
const char *pw = "qwerty123"; // and this is the password
IPAddress ip(192, 168, 0, 1); // From RoboRemo app, connect to this IP
IPAddress netmask(255, 255, 255, 0);
const int port = 9876; // and this port
const int chCount = 4; // 4 channels, you can add more if you have GPIOs
Servo servoCh[chCount]; // will generate 4 servo PWM signals
int chPin[] = {0, 2, 14, 12}; // ESP pins: GPIO 0, 2, 14, 12
int chVal[] = {1500, 1500, 1500, 1500}; // default value (middle)
int usMin = 700; // min pulse width
int usMax = 2300; // max pulse width
WiFiServer server(port);
WiFiClient client;
char cmd[100]; // stores the command chars received from RoboRemo
int cmdIndex;
unsigned long lastCmdTime = 60000;
unsigned long aliveSentTime = 0;
boolean cmdStartsWith(const char *st) { // checks if cmd starts with st
for(int i=0; ; i++) {
if(st[i]==0) return true;
if(cmd[i]==0) return false;
if(cmd[i]!=st[i]) return false;;
}
return false;
}
void exeCmd() { // executes the command from cmd
lastCmdTime = millis();
// example: set RoboRemo slider id to "ch0", set min 1000 and set max 2000
WiFi.softAPConfig(ip, ip, netmask); // configure ip address for softAP
WiFi.softAP(ssid, pw); // configure ssid and password for softAP
server.begin(); // start TCP server
Serial.println("ESP8266 RC receiver 1.1 powered by RoboRemo");
Serial.println((String)"SSID: " + ssid + " PASS: " + pw);
Serial.println((String)"RoboRemo app must connect to " + ip.toString() + ":" + port);
}
void loop() {
// if contact lost for more than half second
if(millis() - lastCmdTime > 500) {
for(int i=0; i<chCount; i++) {
// set all values to middle
servoCh[i].writeMicroseconds( (usMin + usMax)/2 );
servoCh[i].detach(); // stop PWM signals
}
}
if(client.available()) {
char c = (char)client.read(); // read char from client (RoboRemo app)
if(c=='\n') { // if it is command ending
cmd[cmdIndex] = 0;
exeCmd(); // execute the command
cmdIndex = 0; // reset the cmdIndex
} else {
cmd[cmdIndex] = c; // add to the cmd buffer
if(cmdIndex<99) cmdIndex++;
}
}
if(millis() - aliveSentTime > 500) { // every 500ms
client.write("alive 1\n");
// send the alibe signal, so the "connected" LED in RoboRemo will stay ON
// (the LED must have the id set to "alive")
aliveSentTime = millis();
// if the connection is lost, the RoboRemo will not receive the alive signal anymore,
// and the LED will turn off (because it has the "on timeout" set to 700 (ms) )
}
}
ÎnchideЗакрыть
si dupa ideia ar trebui sa mearga dar imi apar citeva erori:
erori
Arduino: 1.5.8 (Windows 7), Board: "Arduino Uno"
sketch_mar19a.ino:33:1: error: 'WiFiServer' does not name a type
sketch_mar19a.ino: In function 'void setup()':
sketch_mar19a.ino:137:3: error: 'WiFi' was not declared in this scope
sketch_mar19a.ino:140:3: error: 'server' was not declared in this scope
sketch_mar19a.ino:144:63: error: 'class IPAddress' has no member named 'toString'
sketch_mar19a.ino: In function 'void loop()':
sketch_mar19a.ino:163:14: error: 'server' was not declared in this scope
Ошибка компиляции.
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
ÎnchideЗакрыть
din ce cauza imi apar? si cum pot rezolva problema data,ca nu prea stiu bine programarea dar am nevoie urgent.
Mesaj util ?
Da0 puncte
#66 by System at 2016-08-27 22:11:16 (429 săptămâni în urmă) - [Link]
Dacă aveți cunoscuți care ar vrea să învețe să programeze, puteți să le dați un Arduino și acest link http://manual.edukit.me M-am străduit să scriu cît mai scurt și cît mai clar
Mesaj util ?
Da0 puncte
#67 by vladic13 (User) (0 mesaje) at 2016-09-15 22:53:11 (426 săptămâni în urmă) - [Link]
Vreau sa programezi harware ( de natura sunt software developer (: ) si m-am gandit sa procur on arduino starter pack CLICK e ok ? pack-ul asta pentru un incepator arduino, sau exagerezi?
Mesaj util ?
Da1 puncte
#68 by cb1cb1 (Cache me if you can) (0 mesaje) at 2016-09-21 20:14:34 (426 săptămâni în urmă) - [Link]
#67 vladic13, da, e destul de normal
Mesaj util ?
Da0 puncte
#69 by vladic13 (User) (0 mesaje) at 2016-09-28 16:42:38 (425 săptămâni în urmă) - [Link]
#68 cb1cb1, Nu am mai reusit sa astept raspunsul si in aceiasi zi l-a procurat. Acum stau astept sa vina Arduino
Mesaj util ?
Da0 puncte
#70 by Tmax (User) (0 mesaje) at 2016-10-04 14:57:59 (424 săptămâni în urmă) - [Link]
#69 vladic13, e bun, eu cind am procurat arduino ca un incepator numai placa am procurato si numai cu placa putin ce poti face.
Mesaj util ?
Da0 puncte
#71 by tangi91 (Power User) (0 mesaje) at 2016-10-05 23:48:19 (424 săptămâni în urmă) - [Link]
#70 Tmax, blink la pin 13 faceam , apoi am procurat niste sensori, lcd 16x2 niste releuri.. si a fost mai interesant
Mesaj util ?
Da0 puncte
#72 by Tmax (User) (0 mesaje) at 2016-10-07 22:01:59 (423 săptămâni în urmă) - [Link]
#71 tangi91, "... blink la pin 13 faceam , apoi am procurat niste sensori, lcd 16x2 niste releuri.. si a fost mai interesant ..." - eu vreu sa-mi cumpar un releu+o placa wifi sa sting lumina de la telefon
P.S. am facut lucrarea de licenta o masinuta comandata de la telefon prin wifi drept ca softul de pe android era deja creat dar in fine mi-a placut ce sa primit
Mesaj util ?
Da0 puncte
#73 by tangi91 (Power User) (0 mesaje) at 2016-10-07 22:04:57 (423 săptămâni în urmă) - [Link]
#72 Tmax, urmatoru imi cumpar ethernet shield sa pot trimite , primi date pe site web
Mesaj util ?
Da0 puncte
#74 by Tmax (User) (0 mesaje) at 2016-10-10 23:31:58 (423 săptămâni în urmă) - [Link]
#73 tangi91, da eu ma gandesc arduino + releu si plus inca ceva ca sa conectez la masina sa controleze daca farurile sunt aprinse si motorul oprit apoi sa le opreasca alimentarea si la player tot.
Mesaj util ?
Da0 puncte
#75 by tangi91 (Power User) (0 mesaje) at 2016-10-12 19:57:58 (423 săptămâni în urmă) - [Link]
#74 Tmax, si cu ce asta iti va usura viata... sunt situatii cand farurile trebuie sa lumineze si cu motorul oprit... iar la player ... se vor dezbate statiile radio din memorie+ nu vad sensul sa opresti playerul ... ca sa economisesti ceva baterie?...
eu arduino doar pentru ceva ce se poate de automatizat as folosi... ca sa nu fac eu acelasi lucru de multe ori.