Arduino

Общение на различные темы.
Аватара пользователя
str
Администратор
Администратор
Контактная информация:
auto:Honda Civic Ferio
Откуда:Томск
Сообщения:6403
Зарегистрирован:12 авг 2008, 06:05
Re: Arduino  »  05 окт 2014, 23:37

05 окт 2014, 23:37

учусь рулить хондоэлектроникой. вот так ардуино перебирает скорость на спидометре от 0 до 100кмч с шагом 10кмч с задержкой в пол секунды.
для этого использовал библиотеку TimerOne. штатными средствами ардуино не умеет генерить ШИМ сигнал с заданными параметрами.

phpBB [video]


если кому надо снять отсечку по скорости то теперь я это смогу сделать без проблем. стоимость аттракциона 700 рублей (цена одной платы ардуино уно)
Mente et manu
Honda Civic `91 1.3 DualCarb Type MR
Аватара пользователя
hck
Администратор
Администратор
auto:
Откуда:Tomsk
Сообщения:2983
Зарегистрирован:21 дек 2008, 02:10

Re: Arduino  »  06 окт 2014, 13:30

06 окт 2014, 13:30

Таки ардуино - это лишь компонент, не забывай. Помимо платы и софта, который будет транзитить скорость в мозг и свыше 180 её фиксировать, нужно ещё схему питания от бортсети, защиту от помех, корпус.
[ Civic Ferio Vi-RSK '99 MT ] [ CR-V RVI '00 MT ] [ Civic III Hatchback '86 MT ]
[ ICQ: 706076 | Skype: hcktsk | VK: hcktsk ]
Аватара пользователя
str
Администратор
Администратор
Контактная информация:
auto:Honda Civic Ferio
Откуда:Томск
Сообщения:6403
Зарегистрирован:12 авг 2008, 06:05

Re: Arduino  »  06 окт 2014, 13:34

06 окт 2014, 13:34

hck писал(а):Таки ардуино - это лишь компонент, не забывай. Помимо платы и софта, который будет транзитить скорость в мозг и свыше 180 её фиксировать, нужно ещё схему питания от бортсети, защиту от помех, корпус.
да, конечно. я это помню и за всем этим к тебе и пете буду обращатья как придет время тулить это в машину. я на пока азы осваиваю и возможноти ардуино.
Mente et manu
Honda Civic `91 1.3 DualCarb Type MR
Аватара пользователя
Hondovod
Президент К-клуба
Президент К-клуба
Контактная информация:
auto:Integra Type ZXK
Откуда:Томск-Колпашево
Сообщения:5954
Зарегистрирован:12 авг 2008, 15:58

Re: Arduino  »  13 окт 2014, 01:31

13 окт 2014, 01:31

Готовая схема питания если что у меня найдется. Библиотеки поправить или добавить, думаю тоже можно, если что особенное понадобится из функционала. А так, конечно такие решения универсальны, изучай, всегда пригодится.
Аватара пользователя
str
Администратор
Администратор
Контактная информация:
auto:Honda Civic Ferio
Откуда:Томск
Сообщения:6403
Зарегистрирован:12 авг 2008, 06:05

Re: Arduino  »  27 ноя 2014, 01:12

27 ноя 2014, 01:12

товарищи знатоки. как подключить ардуино безопасно к автомобильной проводке?
Mente et manu
Honda Civic `91 1.3 DualCarb Type MR
Аватара пользователя
hck
Администратор
Администратор
auto:
Откуда:Tomsk
Сообщения:2983
Зарегистрирован:21 дек 2008, 02:10

Re: Arduino  »  27 ноя 2014, 12:40

27 ноя 2014, 12:40

Зарядник от телефона должен подойти, или переходник "прикурка-USB питание", лучше какой нибудь фирмовый качественный, с нормальным шимом. Но скорее всего земля на входе и выходе будет общая, то есть полной развязки не будет.
[ Civic Ferio Vi-RSK '99 MT ] [ CR-V RVI '00 MT ] [ Civic III Hatchback '86 MT ]
[ ICQ: 706076 | Skype: hcktsk | VK: hcktsk ]
Аватара пользователя
hck
Администратор
Администратор
auto:
Откуда:Tomsk
Сообщения:2983
Зарегистрирован:21 дек 2008, 02:10

Re: Arduino  »  27 ноя 2014, 12:41

27 ноя 2014, 12:41

можно взять с мозга sensor power - тпс или мап. там как раз стабильные 5 вольт.
[ Civic Ferio Vi-RSK '99 MT ] [ CR-V RVI '00 MT ] [ Civic III Hatchback '86 MT ]
[ ICQ: 706076 | Skype: hcktsk | VK: hcktsk ]
Аватара пользователя
str
Администратор
Администратор
Контактная информация:
auto:Honda Civic Ferio
Откуда:Томск
Сообщения:6403
Зарегистрирован:12 авг 2008, 06:05

Re: Arduino  »  27 ноя 2014, 22:41

27 ноя 2014, 22:41

hck писал(а):можно взять с мозга sensor power - тпс или мап. там как раз стабильные 5 вольт.
я так подозреваю там 5 вольт относительно sensor ground, да и чорт его знает какой ток оно там сможет, если экранов на ардуину понавешать с подсветками, она может прилично начать жрать ведь.
ардуиноводы знатоки сказали, цепляй в штатное гнездо питания ардуины напрямую, в ней самой есть стабилизатор напряжения.
Mente et manu
Honda Civic `91 1.3 DualCarb Type MR
Аватара пользователя
str
Администратор
Администратор
Контактная информация:
auto:Honda Civic Ferio
Откуда:Томск
Сообщения:6403
Зарегистрирован:12 авг 2008, 06:05

Re: Arduino  »  03 дек 2014, 01:55

03 дек 2014, 01:55

запилил себе цифровой показометр лямбды на ардуино. ардуино берет сигнал в цифре с контроллера ширика и показывает его на экран. кроме того показывает ещё сопутствующую инфу, состояние ширика, % прогрева зонда, коды ошибок если они есть, калибровку итп. то есть всё то что умеет показывать на ноуте нативный софт от инновейта. девайс работает по последовательному порту, без преобразования сигнала в аналоговый как в родном показометре инновейта. и показывает он лямбду точно, без погрешности, независимо от длины проводов и иных условий. понятно что на родном инновейтовском показометре будет некоторая погрешность показаний, т.к. он аналоговый, а провода имеют конечную проводимость, земля может быть разнесена с контроллером итп.

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

phpBB [video]


код прошивки далее. буду очень рад если ктото сделает ценные критические замечания, т.к. сам я не программер а геохимик :))

#include <LiquidCrystal.h>
// Инициализируем объект-экран, передаём использованные
// для подключения контакты на Arduino в порядке:
// RS, E, DB4, DB5, DB6, DB7
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
byte inByte1 = 0; // incoming serial byte1 -- header
byte inByte2 = 0; // incoming serial byte2 -- header
byte inByte3 = 0; // incoming serial byte3 -- word1
byte inByte4 = 0; // incoming serial byte4 -- word1
byte inByte5 = 0; // incoming serial byte5 -- word2
byte inByte6 = 0; // incoming serial byte6 -- word2
byte B = 0; // number of packets
word AF = 0; //stoichiometric AFR value of current fuel setting in the LM-1
unsigned int L = 0; // Lambda value
unsigned int LPrev = 0;
byte F = 0; // Function value
byte FPrev = 0; // Function value
byte NoData = 0;

void setup()
{
    Serial.begin(19200);
    // устанавливаем размер (количество столбцов и строк) экрана
    lcd.begin(20, 4);

    lcd.setCursor(0, 1);

    lcd.print("Waiting for data");


}

void loop()
{
 
  if (Serial.available() > 6) { //checks if data on serial coonection are available
 

     inByte1 = Serial.read(); //reads first byte of data
     if (bitRead(inByte1,7) && bitRead(inByte1,5) && bitRead(inByte1,1) ) { //checks if inByte1 is header of data packet

       inByte2 = Serial.read(); //reads second byte of data
       if (bitRead(inByte2,7)) { //checks if inByte2 is second byte of header

         bitWrite(B, 0, bitRead(inByte2, 0));
         bitWrite(B, 1, bitRead(inByte2, 1));
         bitWrite(B, 2, bitRead(inByte2, 2));
         bitWrite(B, 3, bitRead(inByte2, 3));
         bitWrite(B, 4, bitRead(inByte2, 4));
         bitWrite(B, 5, bitRead(inByte2, 5));
         bitWrite(B, 6, bitRead(inByte2, 6));
         bitWrite(B, 7, bitRead(inByte1, 0)); //calculates number of packets from header.
  
         if (B>1) { //checks if packet consists any data except header
           inByte3 = Serial.read(); //read afr packet
           inByte4 = Serial.read(); //read afr packet
           bitWrite(F, 0, bitRead(inByte3, 2));
           bitWrite(F, 1, bitRead(inByte3, 3));
           bitWrite(F, 2, bitRead(inByte3, 4)); //calculates wb controller status variable

           bitWrite(AF, 0, bitRead(inByte4, 0));
           bitWrite(AF, 1, bitRead(inByte4, 1));
           bitWrite(AF, 2, bitRead(inByte4, 2));
           bitWrite(AF, 3, bitRead(inByte4, 3));
           bitWrite(AF, 4, bitRead(inByte4, 4));
           bitWrite(AF, 5, bitRead(inByte4, 5));
           bitWrite(AF, 6, bitRead(inByte4, 6));
           bitWrite(AF, 7, bitRead(inByte3, 0)); //calculates afr which is defined as stechoimetric
 
           inByte5 = Serial.read(); //read lambda packet
           inByte6 = Serial.read(); //read lambda packet
         
           bitWrite(L, 0, bitRead(inByte6, 0));
           bitWrite(L, 1, bitRead(inByte6, 1));
           bitWrite(L, 2, bitRead(inByte6, 2));
           bitWrite(L, 3, bitRead(inByte6, 3));
           bitWrite(L, 4, bitRead(inByte6, 4));
           bitWrite(L, 5, bitRead(inByte6, 5));
           bitWrite(L, 6, bitRead(inByte6, 6));
           bitWrite(L, 7, bitRead(inByte5, 0));
           bitWrite(L, 8, bitRead(inByte5, 1));
           bitWrite(L, 9, bitRead(inByte5, 2));
           bitWrite(L, 10, bitRead(inByte5, 3));
           bitWrite(L, 11, bitRead(inByte5, 4));
           bitWrite(L, 12, bitRead(inByte5, 5)); //calculates lambda value

           if (F!=FPrev) update_F(); //checks if status changed since last iteration and if it so runs screen update for status
   if (L!=LPrev) update_L(); //checks if lambda changed since last iteration and if it so runs screen update for lambda

   NoData = 0;  //clears counter which is needed to determine absence of incoming data

         } //if (B>1)
       
       }  //if (bitRead(inByte2,7))

     } // if (bitRead(inByte1,7) && bitRead(inByte1,5) && bitRead(inByte1,1) )

  } //if (Serial.available() > 6)
  else NoData++;

if (NoData>15) { //checks if last 15 iterations were not incoming data and display it on screen if it so.
lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("No signal");
NoData = 0;

  }
    
    
Serial.flush(); //clears serial buffer in order to avoid buffer overflow
    delay(10);


//new_comment1
}  //void loop()

void update_F() //update status on screen
{

       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Status:" );
       lcd.setCursor(8,0);
       switch (F) {
         case 0: //Lambda valid and Aux data valid, normal operation.

           lcd.print("OK");
           lcd.setCursor(0,1);
           lcd.print("AFR:" );
           
           break;
         case 1: //Lambda value contains O2 level in 1/10%
           lcd.print("Too lean");
           lcd.setCursor(0,1);
           lcd.print("%O2:" );
           
           break;
         case 2: //Free air Calib in progress, Lambda data not valid
           lcd.print("Calibration");

//           lcd.setCursor(0,3);
//           lcd.print(L);
           break;
         case 3: //Need Free air Calibration Request, Lambda data not valid
           lcd.print("Need cali");

           break;
         case 4: //Warming up, Lambda value is temp in 1/10% of operating temp.
           lcd.print("Warmup");
           lcd.setCursor(0,1);
           lcd.print("Progress:" );

           lcd.setCursor(12,1);
           lcd.print("%");
           break;
         case 5: //Heater Calibration, Lambda value contains calibration countdown.
           lcd.print("Heater Cali");
           break;
         case 6: //Error code in Lambda value
           lcd.print("Error");
           lcd.setCursor(0,1);
           lcd.print("Code:" );
           break;
         case 7: //reserved
           break;
       } //switch (F)
}

void update_L() //update lambda level on screen
{

       switch (F) {
         case 0: //Lambda valid and Aux data valid, normal operation.

           lcd.setCursor(5,1);
           lcd.print((0.5+(L*0.001))*(AF/10));
   lcd.setCursor(0,2);
           break;
         case 1: //Lambda value contains O2 level in 1/10%
  
           lcd.setCursor(5,1);
           lcd.print(L/10.0);
           break;
         case 2: //Free air Calib in progress, Lambda data not valid

           break;
         case 3: //Need Free air Calibration Request, Lambda data not valid

           lcd.setCursor(0,3);
           lcd.print(L);
           break;
         case 4: //Warming up, Lambda value is temp in 1/10% of operating temp.
 
           lcd.setCursor(10,1);
           lcd.print(L/10);
       
           break;
         case 5: //Heater Calibration, Lambda value contains cal ibration countdown.
 
           lcd.setCursor(0,1);
           lcd.print(L);
           break;
         case 6: //Error code in Lambda value

           lcd.setCursor(6,1);
           lcd.print(L);
           break;
         case 7: //reserved
           break;
       } //switch (F)
}
Mente et manu
Honda Civic `91 1.3 DualCarb Type MR
Аватара пользователя
Sash
Просто великолепная личность
Просто великолепная личность
Контактная информация:
auto:ITR
Сообщения:2343
Зарегистрирован:24 ноя 2008, 23:14

Re: Arduino  »  03 дек 2014, 12:30

03 дек 2014, 12:30

:shock:
отл девайс
Аватара пользователя
str
Администратор
Администратор
Контактная информация:
auto:Honda Civic Ferio
Откуда:Томск
Сообщения:6403
Зарегистрирован:12 авг 2008, 06:05

Re: Arduino  »  03 дек 2014, 23:13

03 дек 2014, 23:13

ребята, ща буду кое какие шурушки заказывать в http://devicter.ru/" target="_blank
можно скооперироваться чтобы сэкономить на доставке. никому ничо не надо?
Mente et manu
Honda Civic `91 1.3 DualCarb Type MR
Аватара пользователя
str
Администратор
Администратор
Контактная информация:
auto:Honda Civic Ferio
Откуда:Томск
Сообщения:6403
Зарегистрирован:12 авг 2008, 06:05

Re: Arduino  »  12 дек 2014, 00:17

12 дек 2014, 00:17

чтобы не потерять сохраню здесь.
схема подключения тахометра автомобиля к ардуино через оптопару.
слева вход сигнала тахометра, справа выход на оптопару.
ЭП.JPG
ЭП.JPG (20.56КБ)3455 просмотров
цифровой фильтр на 4 значения:
int Filter_1[4]={0,0,0,0};
int Index=0;

потом в программе
Filter_1[Index++] = Parameter;
if(Index>3) {Index=0;}

Parameter_filter = (Filter_1[0]+Filter_1[1]+Filter_1[2]+Filter_1[3])>>2;
Mente et manu
Honda Civic `91 1.3 DualCarb Type MR
Аватара пользователя
str
Администратор
Администратор
Контактная информация:
auto:Honda Civic Ferio
Откуда:Томск
Сообщения:6403
Зарегистрирован:12 авг 2008, 06:05

Re: Флудильня))))  »  13 дек 2014, 15:06

13 дек 2014, 15:06

кое кто просил схему подключения показометра ширика. выкладываю принципиалную схему и для самых маленьких макетную схему :)
в редакторе чото у меня не получилось микросхему нужную создать. поэтому поставил на схему первую попавшуюся в DIP16 корпусе. так что на название смотреть не стоит, это микросхема MAX232
lc1 display_схема.png
lc1 display_bb.png
Mente et manu
Honda Civic `91 1.3 DualCarb Type MR
Аватара пользователя
Hondovod
Президент К-клуба
Президент К-клуба
Контактная информация:
auto:Integra Type ZXK
Откуда:Томск-Колпашево
Сообщения:5954
Зарегистрирован:12 авг 2008, 15:58

Re: Arduino  »  20 янв 2015, 01:34

20 янв 2015, 01:34

str писал(а): код прошивки далее. буду очень рад если ктото сделает ценные критические замечания, т.к. сам я не программер а геохимик :))
           lcd.print((0.5+(L*0.001))*(AF/10));
L У тебя объявлена как unigned int. Нельзя ее умножать на 0.001, так как это целочисленная переменная. Результат должен быть 0.Видимо компилятор ее перевел в float. На целочисленном контролере это много времяресурсов сожрёт. Корректнее так
lcd.print((0.5+((float)L*0.001))*(AF/10));
или чисто в целочисленном (правильность проверить, и чтоб L*AF за int не выезло)
lcd.print((AF+L*AF/50)/20);
Аватара пользователя
str
Администратор
Администратор
Контактная информация:
auto:Honda Civic Ferio
Откуда:Томск
Сообщения:6403
Зарегистрирован:12 авг 2008, 06:05

Re: Arduino  »  23 янв 2015, 14:05

23 янв 2015, 14:05

собрал девайс окончательно на монтажной плате.
слева три клемника это для подключения ширика к девайсу, справа 9 клемников это подключение экрана. потенциометр для регулировки яркости подсветки дисплея.
IMG_6266.JPG
разводку сделал монтажными проводами, паяю ещё не очень аккуратно. штырьковые разьемы вставляются прямо в плату ардуино. т.е. решение таксказать болтон, и его можно воспроизвести даже ваще не шаря.
IMG_6265.JPG
вот так всё в сборе выглядит.
IMG_6263.JPG
Mente et manu
Honda Civic `91 1.3 DualCarb Type MR

Вернуться в «Пивнушка»



Новости группы Вконтакте