Мазмуну:
- 1 -кадам: DS1803 туташуулары
- 2 -кадам: Command Byte
- 3 -кадам: DS1803 контролдоо
- 4 -кадам: Орнотуу
- 5 -кадам: Программа
Video: DS1803 Arduino менен кош санарип потенциометр: 5 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Мен DS1803 санарип потметринин колдонулушун Arduino менен бөлүшкүм келет. Бул ICде эки зым интерфейси аркылуу башкарыла турган эки санариптик потметр бар, бул үчүн мен sim.h китепканасын колдоном.
Бул IC кадимки аналогдук потметрди алмаштыра алат. Ушундай жол менен сиз, мисалы, күчөткүчтү же электр менен камсыздоону көзөмөлдөй аласыз.
Бул көрсөтмөдө мен иштеп жаткандыгын көрсөтүү үчүн эки LEDдин жарыгын көзөмөлдөйм.
Ардуино айлануучу коддогучтун импульстарын санап, маанини өзгөрмөлүү идишке [0] жана казанга [1] жайгаштырат. Сиз коддогучту которгондо, казан [0] менен казандын [1] ортосунда которула аласыз.
Казандардын чыныгы баасы DS1803төн кайра окулат жана potValue [0] жана potValue [1] өзгөрмөсүнө жайгаштырылат жана ЖКда көрсөтүлөт.
1 -кадам: DS1803 туташуулары
Бул жерде DS1803 туташууларын көрө аласыз. H - потенциометрдин жогорку жагы, L төмөн жагы жана W тазалагыч. SCL жана SDA - бул автобустук байланыштар.
A0, A1 жана A2 туташуусу менен сиз DS1803кө өзүнүн дарегин бере аласыз, ушундай жол менен бир автобус аркылуу көбүрөөк түзмөктөрдү башкара аласыз. Менин мисалымда, бардык казыктарды жерге туташтыруу менен DS1803 дарегин 0 бердим.
2 -кадам: Command Byte
DS1803 иштөө ыкмасын буйрук байтында колдонсо болот. "Потенциометрди жаз-0" дегенди тандаганыңызда, эки потенциометр тең тандалат, эгер сиз потенциометрди-0 жөнгө салгыңыз келсе, сиз биринчи маалыматтын байтын жөнөтүшүңүз керек. "Потенциометрди жаз-1" жөн гана потметрди тууралаңыз-1. "Эки потенциометрге тең жаз" эки потенциометрге бирдей маанини берет.
3 -кадам: DS1803 контролдоо
Башкаруу байтында (3 -сүрөт) түзмөктүн идентификатору бар, бул дайыма ошол бойдон калат. Менин мисалда A0, A1 жана A2 0, анткени биз бардык А-пиндерди жерге коюп, даректи тандап алабыз. Акыркы бит R/W Arduinoдогу "Wire.beginTransmission" жана "Wire.requestFrom" буйругу менен 0 же 1ге коюлат. 5 -сүрөттө телеграмманы толугу менен көрө аласыз. Окулган телеграмма 4 -сүрөттө көрсөтүлгөн.
4 -кадам: Орнотуу
Бул схема бардыгын кантип туташтырууну көрсөтөт. Nokia ЖК ар кандай байланыштар менен жеткиликтүү, өзүңүздү туура туташтырганыңызга ишениңиз. Ошондой эле айлануучу коддогуч анын ар кандай версияларын камтыйт, кээ бирлеринин ортоңку пинде жалпылыгы бар, башкаларында жок. Мен коддогучтун А жана В чыгаруу сигналдарын чыпкалоо үчүн кичине чыпка тармагын (100nF капкагы бар 470 Ом резистору) койдум. Мага бул чыпка керек, анткени өндүрүштө ызы -чуу көп болчу. Мен дагы ызы -чууну жок кылуу үчүн программама дебюндун таймерин койдум. Калгандары үчүн схема ачык деп ойлойм. ЖКны Adafruit аркылуу заказ кылса болот
5 -кадам: Программа
2 зымдуу автобусту колдонуу үчүн мен Wire.h китепканасын камтыйм. ЖКны колдонуу үчүн мен https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library сайтынан жүктөп ала турган Adafruit китепканасын кошо алам, Adafruit_GFX.h китепканасы бул жерде жеткиликтүү https:// github. com/adafruit/Adafruit-GFX-Китепкана.
#кошуу
#кошуу
#кошуу
Adafruit_PCD8544 дисплей = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Бул жерде сиз бардык өзгөрмөлөрдү көрө аласыз. Башкаруу байт жана буйрук байт мурда айтылгандай. DeBounceTime коддогучтагы ызы -чууга жараша жөнгө салынышы мүмкүн.
байт казаны [2] = {1, 1}; byte controlByte = B0101000; // 7 бит, байт commandByte = B10101001; // акыркы 2 бит - бул потметрди тандоо. байт potValue [2]; int i = 0; int deBounceTime = 10; // Бул маанини ызы -чууга жараша тууралаңыз const encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; белгисиз узак newDebounceTime = 0; unsigned long oldTime; логикалык пресс = 0; логикалык эсеп = 1;
Орнотууда мен туура казыктарды аныктап, статикалык текстти ЖКга коем
void setup () {Wire.begin (); Serial.begin (9600); pinMode (encoder_A, INPUT); pinMode (encoder_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = миллис ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (КАРА); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Укурукта мен адегенде интервал 500 мсден ашпасын текшерем, эгер ооба болсо, ЖК жаңыртылып турат. Болбосо, коддогучтун баскычы текшерилет. Эгерде toggleBuffer басылган болсо, анда чалуу керек. Андан кийин кодер текшерилет. Эгерде 0 кирүүсү төмөн болсо (айлануу аныкталды) Мен В киришин текшерем, эгер В кириши 0 болсо, мен казанды көбөйтөм, башкаларын мен азайтам. Андан кийин, маани DS1803кө tel.write аркылуу жөнөтүлөт.
void loop () {
интервал ();
if (digitalRead (buttonPin) == 1 && (pressed == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pressed = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} else {pot -; if (pot <1) {pot = 1;}} count = 1; newDebounceTime = миллис ();
Wire.beginTransmission (controlByte); // өткөрүп баштоо
Wire.write (commandByte); // potmeters тандоо Wire.write (pot [0] * 10); // potmeter маалыматтарынын 1 байтын жөнөтүү Wire.write (pot [1] * 10); // Wire.endTransmission potmeter маалыматтарынын 2 байтын жөнөтүү (); // берүүнү токтотуу} else if if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = миллис (); }}
void toggleBuffer () {pressed = 1; эгер (i == 0) {i = 1;} башка {i = 0;}}
Биринчиден, мен varibles жазуум керек болгон аймакты тазалайм. Мен муну бул аймакта тик бурчтук тартуу үчүн жасайм. Андан кийин мен экранга өзгөрмөлөрдү жазам.
Void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // биринчи potmeter байт potValue окуу [1] = Wire.read (); // окуу экинчи potmeter байт display.fillRect (40, 0, 40, 45, АК); // LCD display.setCursor боюнча ачык өзгөрмө экран (40, 10); display.print (potValue [0]); // LCD Display.setCursor үчүн 1 -потмердин маанисин жазыңыз (40, 22); display.print (potValue [1]); // LCD display.setCursorго 2 -потмердин маанисин жазуу (60, (10 + i * 12)); display.print ("<"); display.display (); }
боштук аралыгы () {// интервалдын таймери LCDге маалыматтарды жазуу үчүн эгер ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Сунушталууда:
CircuitPython менен кош түстүү тилке графиги: 5 кадам (сүрөттөр менен)
CircuitPython менен кош түстүү тилке графиги: Мен бул LED бар-графаны Pimoroni сайтынан көрдүм жана covid-19 блокировкасын ишке ашырууда бул арзан жана кызыктуу долбоор болушу мүмкүн деп ойлодум. Анын ар биринде 24 LED, кызыл жана жашыл бар 12 сегмент, ошондуктан теорияда сиз r көрсөтө алышыңыз керек
LED жарыктыгын Arduino менен потенциометр менен көзөмөлдөө: 3 кадам
LED жарыктыгын потенциометр менен башкаруу Arduino менен: Бул долбоордо биз потенциометр менен камсыздалуучу өзгөрмөлүү каршылыкты колдонуп, LEDдин жарыктыгын көзөмөлдөйбүз. Бул башталгыч үчүн эң негизги долбоор, бирок ал сизге потенциометр жана LED иштөө жөнүндө көп нерселерди үйрөтөт, алар adva жасоо үчүн талап кылынат
Arduino үчүн MCP41HVX1 санарип потенциометр: 10 кадам (сүрөттөр менен)
MCP41HVX1 Arduino үчүн санарип потенциометр: MCP41HVX1 санарип потенциометрлердин үй -бүлөсү (aka DigiPots) аналогдук потенциометрдин функциясын туураган жана SPI аркылуу башкарылуучу түзүлүштөр. Мисал колдонмо стереоңуздагы үн баскычын DigiPot менен алмаштырат
7 сегменттүү кош дисплейлер CircuitPythonдогу потенциометр тарабынан башкарылат - көрүнүштүн туруктуулугунун көрсөтүлүшү: 9 кадам (сүрөттөр менен)
CircuitPythonдогу потенциометр менен башкарылган кош 7 сегменттүү дисплейлер-Көрүүнүн туруктуулугунун демонстрациясы: Бул проект 7 сегменттүү LED дисплейлериндеги дисплейди башкаруу үчүн потенциометрди колдонот (F5161AH). Потенциометрдин баскычы бурулганда, көрсөтүлгөн номер 0дон 99га чейин өзгөрөт. Каалаган убакта бир гана LED күйөт, абдан кыска, бирок
LEDди потенциометр менен Arduino Uno R3 менен көзөмөлдөө: 6 кадам
LEDди потенциометр менен Arduino Uno R3 менен башкаруу: Буга чейин биз жаңы программалык камсыздоону билүү үчүн агартуучу болушу мүмкүн болгон маалыматтарды башкаруу тактасына жөнөтүү үчүн Serial Monitorду колдонгонбуз. Бул сабакта, потенциометрдин жарыгын кантип өзгөртүү керектигин карап көрөлү жана потенциометрдин маалыматын алалы