Перейти до змісту

HWman

Рекомендовані повідомлення

як спалив?

ка задача перед реле/ключем? якою нагрузкою керувати хочеш?

Посилання на коментар
Поділитись на інші сайти

  • Відповідей 550
  • Створено
  • Остання відповідь

Топ авторів теми

Подав на аналоговий вхід більшу напругу аніж треба, подав на один і на другий порт... а потім зрозумів, що воно не глючить а запахло смаженим...

А з транзисторами, шим і реле ще не пробував, тепер буду обережніший.

Я то думав що LaunchPad MSP-EXP430G2 розрахований на 5 вольт і спокійно подавав на аналогові входи 3.9 вольт... а нє 3.3 В

Ось і простенький вольтметр на основі прикладів середовища розробки, має максимум 3.3 на ланчпаді або 5.0 Вольт на ардуіно, і працює без розподілювач напруги в народі - дєлітель напряжения.


void setup() {

Serial.begin(9600);
}
void loop() {
int sensorValue = (analogRead(A0) / 0.310)/1000; // для ардуіно не 0.310 а 0.2048
Serial.println(sensorValue);
delay (1000);
}

Мене зацепило це відео:

Але мені ще до такого далеко, для початку треба на світлодіодах потренуватись...

ЗІ ардуіно поки чекає свого зіркового часу

Змінено користувачем HWman
Посилання на коментар
Поділитись на інші сайти

оу, ну ще 4ри в запасі =)

Але мені ще до такого далеко, для початку треба на світлодіодах потренуватись...

все набагато простіше.

є схема:

post-681-0-01780100-1361482242_thumb.jpg

Доволяє блимати настольною лампою напр., а не 13 світлодіодом. =)

Десь так:

post-681-0-56397800-1361482796_thumb.jpg

І 220 це не спалений порт. техніка безпеки

Посилання на коментар
Поділитись на інші сайти

Посилання на коментар
Поділитись на інші сайти

Нє... до мережевої напруги ще далеко, 12/24 В з цією напругою буду працювати...

Посилання на коментар
Поділитись на інші сайти

Посилання на коментар
Поділитись на інші сайти

А я тут наваляв скетч для, для відображення графіку зміни температури на LCD 1602.

graph.jpg

відео на youtube.com

  • +1 2
Посилання на коментар
Поділитись на інші сайти

Скетч в студію, тільки сховай у спойлер

Посилання на коментар
Поділитись на інші сайти

Для початку потрібно запрограмувати символи


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte char1[8] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
};
byte char2[8] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
};
byte char3[8] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111,
};
byte char4[8] = {
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111,
B11111,
};
byte char5[8] = {
B00000,
B00000,
B00000,
B11111,
B11111,
B11111,
B11111,
B11111,
};
byte char6[8] = {
B00000,
B00000,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
byte char7[8] = {
B00000,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
byte char8[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
int x=0;
void setup() {
lcd.createChar(1, char1);
lcd.createChar(2, char2);
lcd.createChar(3, char3);
lcd.createChar(4, char4);
lcd.createChar(5, char5);
lcd.createChar(6, char6);
lcd.createChar(7, char7);
lcd.createChar(8, char8);

lcd.begin(16, 2);
}
void loop() {
}

після цього можна заливати скетч


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
float tempC;
int tempPin = 0;
int x=0;
void setup()
{
lcd.begin(16, 2);
}
void loop()
{
lcd.setCursor(0, 1);

tempC = analogRead(tempPin);
tempC = (5.0 * tempC * 10.0)/1024.0;
lcd.setCursor(0, 0);
lcd.print(" \277e\274\276. ");
lcd.print((int)tempC,DEC);
lcd.print(" C ");
lcd.setCursor(x++, 1);
lcd.write(tempC-13);
if (x > 15) x=0;
delay(1000);

}

Ось і все ...

P.S. Графіком можна відображати будь які дані, тільки потрібно трішки переробити скетч і все...

Змінено користувачем inhelp
  • +1 2
Посилання на коментар
Поділитись на інші сайти

Візьми краще звичайний контролер (АВР чи Пік) з простіших, і буде тобі щастя. І як спалеш - то 10грн не так і багато в порівнянні. Куди ти потім ту плату приліпиш? А МК можно багато де використати. Тай паяти там треба мінімум щоб заставити щось йоо робити!

Посилання на коментар
Поділитись на інші сайти

dmPjq.jpg

Щось ніяк не виходить нормально виводити більше аніж одна стрічка за допомогою lcd smartie може є у когось варіанти крім цієї програми ?

Скетч стандартний для виводу серіал на лсд

ЗІ це буде щось типу цього як відпрацюю код на ардуіно перенесу його на ланчпад...

  • +1 1
Посилання на коментар
Поділитись на інші сайти

Щось ніяк не виходить нормально виводити більше аніж одна стрічка за допомогою lcd smartie

Виклади скетч --- тоді будемо про шось говорити...

Посилання на коментар
Поділитись на інші сайти


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(){
lcd.begin(16, 2);
Serial.begin(9600);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("**LCD SMARTIE**");
lcd.setCursor(0,1);
lcd.print("on Arduino TEST");
}
void loop()
{
if (Serial.available()) {
delay(100);
lcd.clear();
while (Serial.available() > 0) {
lcd.write(Serial.read());
}
}
}

Змінено користувачем HWman
Посилання на коментар
Поділитись на інші сайти

Перевірте чи працює http://www.milesburton.com/LCD_Smartie_Powered_By_Arduino_Liquid_Crystal_library ато у мене зараз немає як...

Посилання на коментар
Поділитись на інші сайти

Не-пра-цю-є

Оцей скетч працює на моєму 1602A, насолоджуйтесь :)


// include the library code:
#include <LiquidCrystal.h>

// these constants won't change. But you can change the size of
// your LCD using them:
const int numRows = 2;
const int numCols = 16;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
// RS, RW, Enable, 4,5,6,7 (Refer to the back of your LCD for details)


void setup() {
Serial.begin(9600);
// set up the LCD's number of rows and columns:
lcd.begin(numRows, numCols);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("**LCD SMARTIE**");
lcd.setCursor(0,1);
lcd.print("on Arduino");
}

byte serial_getch(){

int incoming;
while (Serial.available()==0){
}
// read the incoming byte:
incoming = Serial.read();

return (byte) (incoming &0xff);
}

void loop(){

byte rxbyte;
byte temp;

rxbyte = serial_getch();

if (rxbyte == 254) //Matrix Orbital uses 254 prefix for commands
{
switch (serial_getch())
{
case 66: //backlight on (at previously set brightness)
// not implemented

break;
case 70: //backlight off
// not implemented
break;
case 71: //set cursor position
temp = (serial_getch() - 1); //get column byte
switch (serial_getch()) //get row byte
{
//line 1 is already set up
case 2:
temp += 0x40;
break;
case 3:
temp += 0x14;
break;
case 4:
temp += 0x54;
break;
default:
break;
}
lcd.command(0b10000000 + temp);
break;
case 72: //cursor home (reset display position)
lcd.command(2);
break;
case 74: //show underline cursor
lcd.command(0b00001110);
break;
case 75: //underline cursor off
case 84: //block cursor off
lcd.command(0b00001100);
break;
case 76: //move cursor left
lcd.command(16);
break;
case 77: //move cursor right
lcd.command(20);
break;
case 78: //define custom char
lcd.command(64 + (serial_getch() * 8)); //get+set char address
for (temp = 7; temp != 0; temp--)
{
lcd.print((char)serial_getch()); //get each pattern byte
}
break;
case 83: //show blinking block cursor
lcd.command(0b00001111);
break;
case 86: //GPO OFF
//implement later
break;
case 87: //GPO ON
/*temp = serial_getch();
if (temp == 1)
{
GPO1 = GPO_ON;
}*/
break;
case 88: //clear display, cursor home
lcd.command(1);
break;
case 152: //set and remember (doesn't save value, though)
case 153: //set backlight brightness
//not implemented
break;

//these commands ignored (no parameters)
case 35: //read serial number
case 36: //read version number
case 55: //read module type
case 59: //exit flow-control mode
case 65: //auto transmit keypresses
case 96: //auto-repeat mode off (keypad)
case 67: //auto line-wrap on
case 68: //auto line-wrap off
case 81: //auto scroll on
case 82: //auto scroll off
case 104: //init horiz bar graph
case 109: //init med size digits
case 115: //init narrow vert bar graph
case 118: //init wide vert bar graph
break;
default:
//all other commands ignored and parameter byte discarded
temp = serial_getch(); //dump the command code
break;
}
return;
} //END OF COMMAND HANDLER

//change accented char to plain, detect and change descenders
//NB descenders only work on 5x10 displays. This lookup table works
// with my DEM-20845 (Display Elektronik GmbH) LCD using KS0066 chip.
switch (rxbyte)
{
//chars that have direct equivalent in LCD charmap
/* case 0x67: //g
rxbyte = 0xE7;
break;
case 0x6A: //j
rxbyte = 0xEA;
break;
case 0x70: //p
rxbyte = 0xF0;
break;
case 0x71: //q
rxbyte = 0xF1;
break;
case 0x79: //y
rxbyte = 0xF9;
break;
*/ case 0xE4: //ASCII "a" umlaut
rxbyte = 0xE1;
break;
case 0xF1: //ASCII "n" tilde
rxbyte = 0xEE;
break;
case 0xF6: //ASCII "o" umlaut
rxbyte = 0xEF; //was wrong in v0.86
break;
case 0xFC: //ASCII "u" umlaut
rxbyte = 0xF5;
break;

//accented -> plain equivalent
//and misc symbol translation
case 0xA3: //sterling (pounds)
rxbyte = 0xED;
break;
/* case 0xB0: //degrees symbol
rxbyte = 0xDF;
break;
*/ case 0xB5: //mu
rxbyte = 0xE4;
break;
case 0xC0: //"A" variants
case 0xC1:
case 0xC2:
case 0xC3:
case 0xC4:
case 0xC5:
rxbyte = 0x41;
break;
case 0xC8: //"E" variants
case 0xC9:
case 0xCA:
case 0xCB:
rxbyte = 0x45;
break;
case 0xCC: //"I" variants
case 0xCD:
case 0xCE:
case 0xCF:
rxbyte = 0x49;
break;
case 0xD1: //"N" tilde -> plain "N"
rxbyte = 0x43;
break;
case 0xD2: //"O" variants
case 0xD3:
case 0xD4:
case 0xD5:
case 0xD6:
case 0xD8:
rxbyte = 0x4F;
break;
case 0xD9: //"U" variants
case 0xDA:
case 0xDB:
case 0xDC:
rxbyte = 0x55;
break;
case 0xDD: //"Y" acute -> "Y"
rxbyte = 0x59;
break;
/* case 0xDF: //beta //mucks up LCDSmartie's degree symbol??
rxbyte = 0xE2;
break;
*/ case 0xE0: //"a" variants except umlaut
case 0xE1:
case 0xE2:
case 0xE3:
case 0xE5:
rxbyte = 0x61;
break;
case 0xE7: //"c" cedilla -> "c"
rxbyte = 0x63;
break;
case 0xE8: //"e" variants
case 0xE9:
case 0xEA:
case 0xEB:
rxbyte = 0x65;
break;
case 0xEC: //"i" variants
case 0xED:
case 0xEE:
case 0xEF:
rxbyte = 0x69;
break;
case 0xF2: //"o" variants except umlaut
case 0xF3:
case 0xF4:
case 0xF5:
case 0xF8:
rxbyte = 0x6F;
break;
case 0xF7: //division symbol
rxbyte = 0xFD;
break;
case 0xF9: //"u" variants except umlaut
case 0xFA:
case 0xFB:
rxbyte = 0x75;
break;
default:
break;
}

lcd.print((char)rxbyte); //otherwise a plain char so we print it to lcd
return;
}

Смарті качається тут

Працює ось так:

Задаємо такі параметри:

6c26a1c319829d065920fd47a58a9bcc.jpg

Не забувайте вписати сій номер ком ардуіно.

Прога дуже гнучко налаштовується, погугліть.

А я піду переносити даний проект на ланчпад.

Змінено користувачем HWman
Посилання на коментар
Поділитись на інші сайти

Поправлені деякі помилки у скетчі

Посилання на коментар
Поділитись на інші сайти

Посилання на коментар
Поділитись на інші сайти

  • 4 тижня потому...

Як буде - час зроблю таке ж на ATtiny13.


const int numLed[12][4] = {
{0,1,2,4}, //1
{0,1,4,2}, //2
{0,2,4,1}, //3
{1,0,2,4}, //4
{1,0,4,2}, //5
{1,2,4,0}, //6
{2,1,0,4}, //7
{2,0,4,1}, //8
{2,4,1,0}, //9
{4,0,1,2}, //10
{4,0,2,1}, //11
{4,2,1,0}, //12
};
int g = 11;
int h = 0;
int k = 0;

void setup() {

pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, INPUT);
pinMode(4, OUTPUT);

}
void ledLatency (int f){ // для задержки отображения пика
if(g<f && f<=12){
g=f;
onLedOne(g-1);
}else if(h<100 && g>0){
onLedOne(g-1);
h++;
}else if(g>0){
g--;
onLedOne(g-1);
h=0;
}else{
h=0;
}
}
void ledon (int a, int b, int c, int d){ //зажигает определённый светодиод
pinMode(a, OUTPUT);
digitalWrite(a, HIGH);
pinMode(b, INPUT);
pinMode(c, INPUT);
pinMode(d, OUTPUT);
digitalWrite(d, LOW);
delayMicroseconds(1);

for(int i=0; i<5; i++)//очищаем входы
pinMode(i, INPUT);
}
void onLedOne (int i){ //зажигает только один выбранный светодиод
int a = numLed[i][0];
int b = numLed[i][1];
int c = numLed[i][2];
int d = numLed[i][3];
ledon (a, b, c, d);
}
void onLed (int f){ //исходя из полученного уровня зажигает свотодиоды
for (int j=0; j<f; j++)
onLedOne(j);
ledLatency(f);
}
void loop() {

int val = 0;
for(int i=0; i<20; i++)
val = val+ADC_READ();
if(val<20 && val>0)
val = 20;
if(val<40 && val>20)
val =40;
if(val<80 && val>40)
val = 340;
val = val/20;

//onLed (map(val, 0, 1023, 0, 12));
//delayMicroseconds(1);

if(val==0){

if(k>3000){
onLedOne(11);
for(int i=0; i<1000; i++){
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
//delayMicroseconds(1);
digitalWrite(3, LOW);
}
delayMicroseconds(300);
}
k++;

for (int i=0; i<=4; i++)
pinMode (i, INPUT);

ledLatency(0);
delayMicroseconds(10);

}else if( val<2){
onLed (map(val, 0, 1, 0, 1));
k=0;
}else if(val<70){
onLed (map(val, 2, 69, 2, 6));
k=0;
}else if(val<141){
onLed (map(val, 70, 140, 6, 9));
k=0;
}else if(val<191){
onLed (map(val, 141, 190, 9, 10));
k=0;

}else if(val<251){
onLed (map(val, 191, 250, 10, 12));
}else{
for (int i=0; i<=11; i++){
onLedOne(11-i);
g=12;
delayMicroseconds(1);

if(k>100){
for(int i=0; i<100; i++){
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
//delayMicroseconds(1);
digitalWrite(3, LOW);
}
}
}
k++;
}

}
int ADC_READ() // запустим АЦП или что?
{
ADMUX = 3; // ADC pin
ADCSRA |= 1<<ADEN;
ADCSRA |= 1<<ADSC;
while(!(ADCSRA & (1<<ADIF)));
ADCSRA |= 1<<ADIF;
byte low = ADCL;
byte high = ADCH;
ADCSRA &= ~(1 << ADEN); // отключаем АЦП
}

067d0c450f8c9c7a1ec37a294cbe4a6e.png

До речі, ніхто не хоче собі 10-ток замовити? Якщо, що додаткові витрати пополам :)

Змінено користувачем HWman
Посилання на коментар
Поділитись на інші сайти

Детальніше тут http://arduino.ru/fo...a-lyubom-vyvode

Куплю такого індикатора -- можливо в когось завалявся...

Посилання на коментар
Поділитись на інші сайти

Є діоди плоскі, нічим не гірше буде...

736525136.jpg

Посилання на коментар
Поділитись на інші сайти

Є діоди плоскі, нічим не гірше буде...

736525136.jpg

Знаю, але на кросмодромі такий індикатор коштує 6 грн ...

Посилання на коментар
Поділитись на інші сайти

тут не посперечаєшся, заганяють ціни у 300-400% замість людських 30-40% виручки...

Посилання на коментар
Поділитись на інші сайти

Відкрив для себе що таке "мультиплексація методом Чарлі"

http://www.youtube.com/watch?v=KFoZuEKIedo

І відразу руки зачухались, а що якщо таким чином можна виводити покази датчика вологості, типу 25, 35...75, 85% вологості...

Помоєму у них межі вимірювань від 25 і до 85%, це я про дешеві, може є якісь круті і супер точні...

Звісно це все оселити на тіні13а.

Підскажіть будь ласка скільки вартує найпростіший датчик вологості? Може хтось захоче б/в продати?

Посилання на коментар
Поділитись на інші сайти

Відкрив для себе що таке "мультиплексація методом Чарлі"

http://www.youtube.com/watch?v=KFoZuEKIedo

І відразу руки зачухались, а що якщо таким чином можна виводити покази датчика вологості, типу 25, 35...75, 85% вологості...

Помоєму у них межі вимірювань від 25 і до 85%, це я про дешеві, може є якісь круті і супер точні...

Звісно це все оселити на тіні13а.

Підскажіть будь ласка скільки вартує найпростіший датчик вологості? Може хтось захоче б/в продати?

Цей метод працює але не досконало....

Змінено користувачем inhelp
Посилання на коментар
Поділитись на інші сайти

Для публікації повідомлень створіть обліковий запис або авторизуйтесь

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйте новий обліковий запис у нашій спільноті. Це дуже просто!

Реєстрація нового користувача

Увійти

Вже є акаунт? Увійти до системи.

Увійти
×
×
  • Створити...