Arduino и напряжение
- Войдите на сайт для отправки комментариев
Сб, 01/02/2014 - 17:48
Доборый вечер.
Я очень слаб в электричестве, поэтому прошу помощи.
Есть Arduino, есть некое устройство которое подключаю к ней через макетную плату. Этому устроству для питания надо 9в - собственно это питание я ему даю с 9 вольтовой батарейки. Отрицательный полюс этой батарейки я пустил в GND на Arduino. Вопрос - этому заземлению без разницы сколько вольт на этой батарейке - можно ли так делать(с 9в. минус тыкать в gnd arduino) - или я сожгу Arduino?
Без схемы будет очень сложно понять насколько это безопасно.
Доборый вечер.
Я очень слаб в электричестве, поэтому прошу помощи.
Есть Arduino, есть некое устройство которое подключаю к ней через макетную плату. Этому устроству для питания надо 9в - собственно это питание я ему даю с 9 вольтовой батарейки. Отрицательный полюс этой батарейки я пустил в GND на Arduino. Вопрос - этому заземлению без разницы сколько вольт на этой батарейке - можно ли так делать(с 9в. минус тыкать в gnd arduino) - или я сожгу Arduino?
Главное, чтоб плюс не соединяли, а "землю" соединять нужно - ничего страшного не произойдет ;)
плюс ардуины вообще никак не касается, только минус с батарейки 9в. веду в gnd на arduino - больше просто некуда. Ну т.е. это точно безопасно для arduino? Переспрашиваю т.к. уж очень боюсь сжечь плату
На канале AmperkaRu на ютубе есть отличные переводы обучающих видео по ардуино.. в одном из видео как раз рассматривается Ваш случай с ардуино и батарейкой 9в
Чего вы темните с неким устройством. Если оно питается от 9в, то скорее важно с каким напряжением работают его входы-выходы. А не подключение его - к - питания ардуино (что верно). А вот если на ВВ 9в, то ардуино вы спалите.
Нет. Про ВВ я знаю. Я согласовал уровни.
Собирал по примеру на оф. сайте арудины
Схема вот эта http://www.arduino.cc/en/Tutorial/ArduinoSoftwareRS232
Только еще к этой схеме я даю 9v с батарейки на 8 пин rs232(так сказано в документации) а минус с этой батарейки веду в gnd arduino. Точнее я вообще вместо 5v с arduino на плюс макетной платы подключаю эти 9v с плюса батарейки. Т.е. на ардуине я использую только tx,rx и gnd - а плюс на макетную плату идет с 9v крона. Вот я хочу понять насколько это безопасно?
Точнее я вообще вместо 5v с arduino на плюс макетной платы подключаю эти 9v с плюса батарейки. Т.е. на ардуине я использую только tx,rx и gnd - а плюс на макетную плату идет с 9v крона. Вот я хочу понять насколько это безопасно?
Вы включили 5-вольтовый чип макс232 от 9-вольтовой батарейки?
да я уже понял что так нельзя пока писал сюда - переделал))) Теперь просто я даю 9v с батарейки на 8 пин rs232 а минус с этой батарейки веду в gnd arduino. Так можно?
Конечный вопрос такой - 9v с батарейки на 8 пин rs232 а минус с этой батарейки в gnd arduino - это мне ничего не сожжет?
ivan24, из ваших слов пока не ясно к чему вы подключаете ардуино, и зачем нужно этому чему-то на 8 ноге питание. В общем случае, если нужно не питать, а дать сигнал высокого уровня, то нужно подключить через резистор.
Веди минус смело от этой батарейки к ардуино.
Веди минус смело от этой батарейки к ардуино.
у меня в доме сосед батарею отопления заземлил - отвалилась через три года, затопило кипятком три этажа.
Песня про соседа :)
короче я понял что заземлить можно - но с нужным резистором - правильно?
Подскажите уж тогда на сколько Ом надо резистор, чтобы из 9в. сделать 5?
схему нарисуйте, чо вы там соединяете. А то чувствую скоро запахнет паленой ардуиной
http://www.arduino.cc/en/Tutorial/ArduinoSoftwareRS232 вот эта схема, точь в точь, только еще в gnd arduino веду минус с 9 вольтовой батарейки, а плюс с батарейки на 8 пин rs232.
В этом и вопрос - а можно ли этот минус с батарейки в ардуину вести?
ivan24, без полного понимания что вы хотите сделать ничего гарантировать нельзя. Что вы хотите подсоединить к ардуино посредством преобразователя уровня?, для чего нужно подавать питание от батарейки на разъём?
наверно он хочет дуину, питающуюся от батарейки, законектить к ПК. Если так, то
- батареи на gnd дуины,
+ на Vin дуины
gnd и 5В с дуины на соответствующие ноги max232
Я вот такую штуку купил - жду. http://www.aliexpress.com/item/MAX3232-RS232-Serial-Port-to-TTL-Converter-Module-DB9-Connector-with-Cables-H1E1/1352318019.html
В общем попробую описать все от начала и до конца.
Собрал вот это http://www.arduino.cc/en/Tutorial/ArduinoSoftwareRS232 (Преобразователь уровней max232cpe).
Саму ардуину запитал от usb. С 5v ардуины веду на + макетной платы, с gnd ардуины на - макетной платы.
Значит через rs232 я хочу подключить вкт-7(тепловычислитель). Данные хочу слать в интернет.
Все что я описал прекрасно работает - но, с одним НО, если я втыкаю в свою ардуину ethernet shield - перестает работать.
Далее, в документации ВКТ-7 сказано, что на 8 пин ему нужен постоянный логический 1 не менее 9v.
Я решил, что раз без шилда работает, а с шилдом - нет - возможно он сжирает нужное электричество.
Собственно эти 9v на 8 пин я и давал с батарейки. Но батарейку тоже надо заземлить. Заземлял я ее в gnd ардуины.
Когда собираю с батарейкой - начинает работать и с ethernet шилдом(т.е. мое предположение верное видимо)
Т.е. схема такая:
Это работает, но насколько это безопасно?
У меня весь процесс из-за этого вопроса стоит на месте. Подскажите
ivan24, раз работает, значит критических ошибок нет. Желательно в разрыв между плюсом батарейки и 8 ногой rs232 включить резистор от 200ом до килоома.
Ок, большое спасибо
Доброго времени суток.
Хочу поинтересоваться, получилось ли в итоге подружить ардуино и вкт-7 и поделиться кодом :)
Заранее благодарю.
Доброго времени суток.
Хочу поинтересоваться, получилось ли в итоге подружить ардуино и вкт-7 и поделиться кодом :)
Заранее благодарю.
еще актуально?
Доброго времени суток.
Хочу поинтересоваться, получилось ли в итоге подружить ардуино и вкт-7 и поделиться кодом :)
Заранее благодарю.
еще актуально?
Да!
использовал этот моуль, но думаю без него тоже будет работать, модуль больше в качестве развязки, вычиситель прекрасно понимает уровень 5В.
https://ru.aliexpress.com/item/RS232-to-TTL-Converter-Board-Serial-Module-3-3V-5-5V-MAX3232-for-Arduino-Pack-of/32740137830.html?spm=2114.03010208.3.376.xfv4q8&ws_ab_test=searchweb0_0,searchweb201602_5_10065_10068_10136_10137_10138_10060_10062_10141_10056_10055_10054_10059_10099_10103_10102_10096_10148_120_10052_10053_10050_10107_10142_10051_10143_10084_10117_10083_10119_10080_10082_10081_10110_10111_10112_10113_10114_10037_10033_10032_10078_10079_10077_10073_10070_10123_10120_10127_10124_10125,searchweb201603_2,afswitch_1_afChannel,ppcSwitch_5,single_sort_0_default&btsid=b4298fe6-bbfc-43a1-8db6-d1293d8d6135&algo_expid=b617f201-06ef-48d3-aef4-5e60657b28e7-43&algo_pvid=b617f201-06ef-48d3-aef4-5e60657b28e7
на модуле с обратной стороны к 8 пину припаял перемычку от питания. Вожусь с протоколом. Пока научился читать текущие параметры и некоторые итоговые, уж больно избыточный протокол обмена.
код для меги, еще сосвсем сырой, выдает T1, T2, V1, M1 (испытан на столе)
unsigned long previousMillisTemp = 0; unsigned long intervalTemp = 10000; // Интервал опроса unsigned long currentMillis; byte buf[270]; int k; int rs; #define DEBUG 0 byte cmd1[] = {0xFF, 0xFF, 0x00, 0x10, 0x3F, 0xFF, 0x00, 0x00, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x64, 0x54}; //Начало сеанса связи // ответ 00 10 3F FF 00 00 FD FC byte cmd2[] = {0xFF, 0xFF, 0x00, 0x03, 0x3F, 0xFE, 0x00, 0x00, 0x29, 0xFF}; //Чтение данных // FF FF 00 03 3F FE 00 00 29 FF byte cmd3[] = {0xFF, 0xFF, 0x00, 0x03, 0x3F, 0xF9, 0x00, 0x00, 0x98, 0x3E}; // свойства byte cmd31[] = {0xFF, 0xFF, 0x00, 0x03, 0x3F, 0xFC, 0x00, 0x00, 0x88, 0x3F}; // Запрос на чтение перечня активных элементов данных byte cmd4[] = {0xFF, 0xFF, 0x00, 0x10, 0x3F, 0xFF, 0x00, 0x00, 0x60, 0x2C, 0x00, 0x00, 0x40, 0x07, 0x00, 0x2D, 0x00, 0x00, 0x40, 0x07, 0x00, 0x2E, 0x00, 0x00, 0x40, 0x07, 0x00, 0x2F, 0x00, 0x00, 0x40, 0x07, 0x00, 0x30, 0x00, 0x00, 0x40, 0x07, 0x00, 0x35, 0x00, 0x00, 0x40, 0x07, 0x00, 0x37, 0x00, 0x00, 0x40, 0x07, 0x00, 0x38, 0x00, 0x00, 0x40, 0x07, 0x00, 0x39, 0x00, 0x00, 0x40, 0x01, 0x00, 0x3B, 0x00, 0x00, 0x40, 0x01, 0x00, 0x3C, 0x00, 0x00, 0x40, 0x01, 0x00, 0x3D, 0x00, 0x00, 0x40, 0x01, 0x00, 0x42, 0x00, 0x00, 0x40, 0x01, 0x00, 0x46, 0x00, 0x00, 0x40, 0x01, 0x00, 0x45, 0x00, 0x00, 0x40, 0x01, 0x00, 0x4C, 0x00, 0x00, 0x40, 0x01, 0x00, 0x8C, 0x75 }; //71 текущие byte cmd5[] = { 0xFF, 0xFF, 0x00, 0x10, 0x3F, 0xFF, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x01, 0x00, 0x00, 0x40, 0x02, 0x00, 0x09, 0x00, 0x00, 0x40, 0x02, 0x00, 0x0A, 0x00, 0x00, 0x40, 0x02, 0x00, 0x0C, 0x00, 0x00, 0x40, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x40, 0x02, 0x00, 0x11, 0x00, 0x00, 0x40, 0x04, 0x00, 0x12, 0x00, 0x00, 0x40, 0x04, 0x00, 0x13, 0x00, 0x00, 0x40, 0x04, 0x00, 0x4D, 0x00, 0x00, 0x40, 0x01, 0x00, 0xA7, 0x8C }; byte cmd51[] = { 0xFF, 0xFF, 0x00, 0x10, 0x3F, 0xFD, 0x00, 0x00, 0x02, 0x04, 0x00, 0x72, 0x12}; //65 итоговые byte cmd6[] = {0xFF, 0xFF, 0x00, 0x10, 0x3F, 0xFF, 0x00, 0x00, 0x36, 0x03, 0x00, 0x00, 0x40, 0x04, 0x00, 0x06, 0x00, 0x00, 0x40, 0x04, 0x00, 0x07, 0x00, 0x00, 0x40, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x40, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x40, 0x02, 0x00, 0x11, 0x00, 0x00, 0x40, 0x04, 0x00, 0x12, 0x00, 0x00, 0x40, 0x04, 0x00, 0x13, 0x00, 0x00, 0x40, 0x04, 0x00, 0x4D, 0x00, 0x00, 0x40, 0x01, 0x00, 0x73, 0x86 }; byte cmd61[] = { 0xFF, 0xFF, 0x00, 0x10, 0x3F, 0xFD, 0x00, 0x00, 0x02, 0x05, 0x00, 0x73, 0x82}; void setup() { Serial.begin(9600); Serial3.begin(9600, SERIAL_8N2); // к вычислителю //Serial3.begin(9600); // тоже работает Serial.println("start"); delay(500); rs = sendCmd(cmd1, sizeof(cmd1), buf, sizeof(buf)); // подобрать паузы delay(1000); rs = sendCmd(cmd2, sizeof(cmd2), buf, sizeof(buf)); //for (int i = 0; i < rs; i++) Serial.print(buf[i], HEX); //Serial.println(); delay(100); rs = sendCmd(cmd3, sizeof(cmd3), buf, sizeof(buf)); // delay(100); //for (int i = 0; i < rs; i++) Serial.print(buf[i], HEX); //Serial.println(); delay(300); rs = sendCmd(cmd4, sizeof(cmd4), buf, sizeof(buf)); // delay(100); //for (int i = 0; i < rs; i++) Serial.print(buf[i], HEX); //Serial.println(); delay(300); rs = sendCmd(cmd31, sizeof(cmd31), buf, sizeof(buf)); delay(300); rs = sendCmd(cmd5, sizeof(cmd5), buf, sizeof(buf)); // //for (int i = 0; i < rs; i++) Serial.print(buf[i], HEX); //Serial.println(); delay(300); rs = sendCmd(cmd51, sizeof(cmd51), buf, sizeof(buf)); // delay(300); Serial.println("Tekushchie:"); delay(100); rs = sendCmd(cmd2, sizeof(cmd2), buf, sizeof(buf)); // for (int i = 3; i < buf[2]; i++) { // Serial.print(buf[i]); // Serial.print(';'); // } int t; t |= (int)buf[4] << 8; t |= (int)buf[3] ; // for (int i = 0; i < rs; i++) Serial.print(buf[i], HEX); Serial.print("t1="); Serial.println(t / 100.0); t = 0; t |= (int)buf[8] << 8; t |= (int)buf[7] ; Serial.print("t2="); Serial.println(t / 100.0); Serial.println(); delay(300); Serial.println("Itog:"); //rs = sendCmd(cmd31, sizeof(cmd31), buf, sizeof(buf)); //delay(300); rs = sendCmd(cmd6, sizeof(cmd6), buf, sizeof(buf)); delay(300); rs = sendCmd(cmd61, sizeof(cmd61), buf, sizeof(buf)); delay(100); rs = sendCmd(cmd2, sizeof(cmd2), buf, sizeof(buf)); long v = 0; v |= (long)buf[6] << 24; v |= (long)buf[5] << 16; v |= (long)buf[4] << 8; v |= (long)buf[3] ; // for (int i = 0; i < rs; i++) Serial.print(buf[i], HEX); Serial.print("V1="); Serial.println(v / 100.0); v = 0; v |= (long)buf[12] << 24; v |= (long)buf[11] << 16; v |= (long)buf[10] << 8; v |= (long)buf[9] ; // for (int i = 0; i < rs; i++) Serial.print(buf[i], HEX); Serial.print("M1="); Serial.println(v / 100.0); Serial.println(); // for (int i = 0; i < rs; i++) Serial.print(buf[i], HEX); } void loop() { currentMillis = millis()+intervalTemp; ; if (currentMillis - previousMillisTemp > intervalTemp) { previousMillisTemp = currentMillis; // здесь будем опрашивать счетчик } } int sendCmd(byte * cmd, int s, byte * response, int rs) { if (DEBUG) Serial.print("send: "); int n = 0; byte byteReceived; for (int i = 0; i < s; i++) { Serial3.write(cmd[i]); if (DEBUG) { Serial.print(cmd[i], HEX); Serial.print(";"); } //delay(2); } delay(200); if (DEBUG) { Serial.println(); Serial.print("get: "); } for (int i = 0; i < rs; i++) response[i] = 0; while (Serial3.available()) { byteReceived = Serial3.read(); response[n++] = byteReceived; if (DEBUG) { Serial.print(byteReceived, HEX); Serial.print(";"); } delay(1); } delay(5); if (DEBUG) { Serial.println(); } //Serial.print("count: "); Serial.println(n); if (n > rs) n = rs; if (n > 2) { word CheckSumm = Crc16(response, n - 2); if ((response[n - 2] != (byte)CheckSumm) || (response[n - 1] != CheckSumm >> 8)) { Serial.println("crc erorr"); n = 0; //Serial.print((byte)CheckSumm, HEX); Serial.print("!="); Serial.println(response[n - 2], HEX); //Serial.print(CheckSumm >> 8, HEX); Serial.print("!="); Serial.println(response[n - 1], HEX); } else if (DEBUG) { Serial.println("crcOK"); } } else n = 0; return n; } word Crc16(byte *Data, unsigned long s) { byte *ptrByte; word w; ptrByte = Data; w = 0xFFFFU; for (int byte_cnt = 0; byte_cnt < s; byte_cnt++) { w = (word)((w / 256U) * 256U + ((w % 256U) ^ (Data[byte_cnt]))); for (int shift_cnt = 0; shift_cnt < 8; shift_cnt++) { /*обработка байта*/ if ((w & 0x1) == 1) w = (word)((w >> 1) ^ 0xA001U); else w >>= 1; } } return w; }Если инересно, ВТЭ еще проще подключается и намного проще обмен, никаких опторазвязок не нужно.
попробывал без модуля, не получилось. с модулем все ок.
Спасибо огромное! На днях пойду ковырять