Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Graph

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


График[1]

Этот пример показывает, как отправлять байт данных с Arduino на персональный компьютер, а затем выводить результат на график. Это называется последовательной передачей данных, потому что и Arduino, и компьютер будут видеть это как подключение через последовательный порт (даже если на самом деле используется USB-кабель). Для того, чтобы увидеть отправленные данные, можно воспользоваться окном Serial Monitor, или же прочитать их с помощью Processing (см. код ниже), Flash, PD, Max/MSP (тоже см. ниже) и т.д.

Необходимое оборудование

  • Плата Arduino;
  • Аналоговый датчик (потенциометр, фотоэлемент, силоизмерительный резистор и т.д.);

Необходимое ПО

Цепь

Подключите потенциометр или другой аналоговый датчик к 0-ому входному аналоговому контакту.

Graph-circuit3.png

Схема

AnalogReadSerial sch.png

Код для Arduino

  1. /*
  2.   График
  3.  
  4.   Простой пример передачи данных от платы Arduino к компьютеру – данные от 0-ого входного аналогового контакта передаются на последовательный порт.
  5.  
  6.  Мы называем это «последовательной» передачей данных, поскольку Arduino и компьютер воспринимают это подключение как подключение через последовательный порт, даже несмотря на то, что вы, возможно, используете для него USB-кабель.
  7.  
  8.  Байты передаются от Arduino к компьютеру один за другим, т.е. последовательно.
  9.  
  10.  Для просмотра данных от Arduino можно воспользоваться окном Serial Monitor или же прочесть их при помощи Processing, PD, Max/MSP или любой другой программы, умеющей читать данные, переданные через последовательный порт.
  11.  
  12.  Код для Processing (см. ниже) делает из полученных данных график, поэтому за изменением данных от датчика можно следить в режиме реального времени.
  13.  
  14.  Цепь:
  15.  * Любой аналоговый сенсор, подсоединенный к 0-ому аналоговому контакту
  16.  
  17.  Создан в 2006 году Дэвидом А. Меллисом (David A. Mellis),
  18.  модифицирован 9 апреля 2012 Томом Иго (Tom Igoe)
  19.  и Скоттом Фитцджеральдом (Scott Fitzgerald).
  20.  
  21. Этот код не защищен авторским правом.
  22.  
  23. http://www.arduino.cc/en/Tutorial/Graph
  24.  */
  25.  
  26. void setup() {
  27.   // инициализируем последовательную передачу данных:
  28.   Serial.begin(9600);
  29. }
  30.  
  31. void loop() {
  32.   // отправляем данные на 0-ой входной аналоговый контакт:
  33.   Serial.println(analogRead(A0));
  34.   // ждем немного, чтобы аналогово-цифровой преобразователь
  35.   // стабилизировался после последнего считывания:
  36.   delay(2);
  37. }

Код для Processing

  1. /* Код к Processing для этого примера */
  2.  
  3.  // Скетч для графика
  4.  
  5.  
  6.  // Эта программа берет ASCII-строки,
  7.  // переданные через последовательный порт со скоростью 9600 бит в секунду,
  8.  // а затем делает на их основе график.
  9.  // Работает со значениями в диапазоне от 0 до 1023,
  10.  // заканчивающихся переводом строки (или переводом строки и разрывом строки)
  11.  
  12.  // Создан 20 апреля 2005,
  13.  // обновлен 18 января 2008 Томом Иго (Tom Igoe).
  14.  
  15.  // Этот код не защищен авторским правом.
  16.  
  17.  import processing.serial.*;
  18.  
  19.  Serial myPort;        // последовательный порт
  20.  int xPos = 1;         // задаем горизонтальную позицию для графика
  21.  
  22.  void setup () {
  23.  // задаем размер окна:
  24.  size(400, 300);        
  25.  
  26.  // выдаем список всех доступных последовательных портов:
  27.  println(Serial.list());
  28.  // я знаю, что на моем Mac первый порт из этого списка всегда подключен к Arduino,
  29.  // поэтому я сразу открываю Serial.list()[0].
  30.  // разумеется, мой порт может не совпадать с вашим,
  31.  // поэтому имеет смысл подправить нижнюю строчку
  32.  // в соответствии с вашими реалиями.
  33.  myPort = new Serial(this, Serial.list()[0], 9600);
  34.  // не запускаем serialEvent() до тех пор, пока не увидим символ перевода строки:
  35.  myPort.bufferUntil('\n');
  36.  // задаем цвет заднего фона для графика:
  37.  background(0);
  38.  }
  39.  void draw () {
  40.  // тут описываем все, что происходит в serialEvent()
  41.  }
  42.  
  43.  void serialEvent (Serial myPort) {
  44.  // берем строку с ASCII-символами:
  45.  String inString = myPort.readStringUntil('\n');
  46.  
  47.  if (inString != null) {
  48.  // убираем любые пробелы:
  49.  inString = trim(inString);
  50.  // конвертируем данные в int и трансформируем их так, чтобы они соответствовали высоте экрана:
  51.  float inByte = float(inString);
  52.  inByte = map(inByte, 0, 1023, 0, height);
  53.  
  54.  // рисуем линию:
  55.  stroke(127,34,255);
  56.  line(xPos, height, xPos, height - inByte);
  57.  
  58.  // если добрались до края экрана, возвращаемся к началу:
  59.  if (xPos >= width) {
  60.  xPos = 0;
  61.  background(0);
  62.  }
  63.  else {
  64.  // увеличиваем значение горизонтальной позиции:
  65.  xPos++;
  66.  }
  67.  }
  68.  }

Используя код, указанный выше, вы получите график данных от датчика. Если данные от аналогового датчика поменяются, вы получите что-то вроде этого:

Graph-output.png

Код для Max

  1. /* Патч к Max/MSP v5 для этого примера */
  2.  ----------begin_max5_patcher----------
  3. 1591.3oc0YszbaaCD9r7uBL5RalQUAO3CvdyS5zVenWZxs5NcfHgjPCIfJIT
  4. RTxj+6AOHkoTDooroUs0AQPR73a+1cwtK3WtZxzEpOwqlB9YveAlL4KWMYh6
  5. Q1GLo99ISKXeJMmU451zTUQAWpmNy+NM+SZ2y+sR1l02JuU9t0hJvFlNcMPy
  6. dOuBv.U5Rgb0LPpRpYBooM3529latArTUVvzZdFPtsXAuDrrTU.f.sBffXxL
  7. vGE50lIHkUVJXq3fRtdaoDvjYfbgjujaFJSCzq4.tLaN.bi1tJefWpqbO0uz
  8. 1IjIABoluxrJ1guxh2JfPO2B5zRNyBCLDFcqbwNvuv9fHCb8bvevyyEU2JKT
  9. YhkBSWPAfq2TZ6YhqmuMUo0feUn+rYpY4YtY+cFw3lUJdCMYAapZqzwUHX8S
  10. crjAd+SIOU6UBAwIygy.Q1+HAA1KH6EveWOFQlitUK92ehfal9kFhUxJ3tWc
  11. sgpxadigWExbt1o7Ps5dk3yttivyg20W0VcSmg1G90qtx92rAZbH4ez.ruy1
  12. nhmaDPidE07J+5n2sg6E6oKXxUSmc20o6E3SPRDbrkXnPGUYE.i5nCNB9TxQ
  13. jG.G0kCTZtH88f07Rt0ZMMWUw8VvbKVAaTk6GyoraPdZff7rQTejBN54lgyv
  14. HE0Ft7AvIvvgvIwO23jBdUkYOuSvIFSiNcjFhiSsUBwsUCh1AgfNSBAeNDBZ
  15. DIDqY.f8.YjfjV1HAn9XDTxyNFYatVTkKx3kcK9GraZpI5jv7GOx+Z37Xh82
  16. LSKHIDmDXaESoXRngIZQDKVkpxUkMCyXCQhcCK1z.G457gi3TzMz4RFD515F
  17. G3bIQQwcP3SOF0zlkGhiCBQ1kOHHFFlXaEBQIQnCwv9QF1LxPZ.A4jR5cyQs
  18. vbvHMJsLll01We+rE2LazX6zYmCraRrsPFwKg1ANBZFY.IAihr8Ox.aH0oAL
  19. hB8nQVw0FSJiZeunOykbT6t3r.NP8.iL+bnwNiXuVMNJH9H9YCm89CFXPBER
  20. bz422p8.O4dg6kRxdyjDqRwMIHTbT3QFLskxJ8tbmQK4tm0XGeZWF7wKKtYY
  21. aTAF.XPNFaaQBinQMJ4QLF0aNHF0JtYuHSxoUZfZY6.UU2ejJTb8lQw8Fo5k
  22. Rv6e2PI+fOM71o2ecY1VgTYdCSxxUqLokuYq9jYJi6lxPgD2NIPePLB0mwbG
  23. YA9Rgxdiu1k5xiLlSU6JVnx6wzg3sYHwTesB8Z5D7RiGZpXyvDNJY.DQX3.H
  24. hvmcUN4bP1yCkhpTle2P37jtBsKrLWcMScEmltOPv22ZfAqQAdKr9HzATQwZ
  25. q18PrUGt6Tst2XMCRUfGuhXs6ccn23YloomMqcTiC5iMGPsHsHRWhWFlaenV
  26. XcqwgCQiGGJzptyS2ZMODBz6fGza0bzmXBj7+DA94bvpR01MffAlueO7HwcI
  27. pWCwmzJdvi9ILgflLAFmyXB6O7ML0YbD26lenmcGxjVsZUN+A6pUK7AtTrPg
  28. M+eRYG0qD9j4I7eEbco8Xh6WcO.or9XDC6UCiewbXHkh6xm5LiPEkzpJDRTu
  29. mEB44Fgz4NCtJvX.SM1vo2SlTCZGAe7GZu6ahdRyzFOhYZ+mbVVSYptBw.K1
  30. tboIkatIA7c1cTKD1u.honLYV04VkluHsXe0szv9pQCE9Ro3jaVB1o15pz2X
  31. zYoBvO5KXCAe0LCYJybE8ZODf4fV8t9qW0zYxq.YJfTosj1bv0xc.SaC0+AV
  32. 9V9L.KKyV3SyTcRtmzi6rO.O16USvts4B5xe9EymDvebK0eMfW6+NIsNlE2m
  33. eqRyJ0utRq13+RjmqYKN1e.4d61jjdsauXe3.2p6jgi9hsNIv97CoyJ01xzl
  34. c3ZhUCtSHx3UZgjoEJYqNY+hYs5zZQVFW19L3JDYaTlMLqAAt1G2yXlnFg9a
  35. 53L1FJVcv.cOX0dh7mCVGCLce7GFcQwDdH5Ta3nyAS0pQbHxegr+tGIZORgM
  36. RnMj5vGl1Fs16drnk7Tf1XOLgv1n0d2iEsCxR.eQsNOZ4FGF7whofgfI3kES
  37. 1kCeOX5L2rifbdu0A9ae2X.V33B1Z+.Bj1FrP5iFrCYCG5EUWSG.hhunHJd.
  38. HJ5hhnng3h9HPj4lud02.1bxGw.
  39. -----------end_max5_patcher-----------

Патч к Max указан в примере выше. Скопируйте его и вставьте в новое окно Max, чтобы увидеть этот скетч:

Max-graph.png

См.также

  1. Serial
  2. analogRead()
  3. Dimmer
  4. Physical Pixel
  5. Virtual Color Mixer
  6. Serial Call Response
  7. Serial Call Response ASCII
  8. Serial input (Switch (case) Statement)

Внешние ссылки

  1. Arduino - Graph