Jump to content
pingyini

Электронная сигарета на ардуино

Recommended Posts

Всем доброго времени суток. Решил я сделать "умную" электронную сигарету на arduino. Концепция заключается в кнопочном управлении мощностью посредством ШИМ, наличии экрана, и некоторыми защитами в виде ограничения максимального времени нажатия и уход камня в сон (режим пониженного энергопотребления) после N секунд простоя.

Вводные: по нажатию кнопки запускается ШИМ и управляет полевиком, но в целях защиты я хочу ограничить время выполнения кода до 7 секунд(что бы при случайном зажатии кнопки в кармане не получить травматическую ампутацию конечностей)


Проблема пришла откуда не ждали - обработка нажатой основной кнопки срабатывает как попало. Нажимая кнопку обработчик может сработать сразу и отработает как по маслу, а может и через 5 нажатий не сработать вовсе.  Проверял в живую на Arduino UNO, Pro Mini (328е Меги) и в Proteus'е. Симптомы одни и те же.  Проблема очевидно в коде но я в упор не вижу в чем может быть загвоздка. Уровень у меня "штота умею" поэтому не судите строго. 

 

#define pwmPin 5
#define buttonStart 3
#define maxOnTime 7000 //максимальное время выполнения условия нажатой кнопки
#define RED_LED 7
#define GREEN_LED 8

int power = 150;
//boolean StartState;
boolean StartStateFlag; //Флаг кнопки Старт
unsigned long pressTime;


void setup() {
  pinMode(pwmPin, OUTPUT);
  pinMode(buttonStart, INPUT);
  pinMode(RED_LED, OUTPUT);
  pinMode(GREEN_LED, OUTPUT);
  Serial.begin(9600); //чисто для отладки
}

void loop() {
  if (digitalRead(buttonStart) && StartStateFlag && ((millis() - pressTime) <= maxOnTime)) {  // (1) если кнопка старт нажата И была отпущена И нажата менее 7 секунд выполняем:
    analogWrite(pwmPin, power); //запуск ШИМ
    Serial.println("PWM_ON");
    digitalWrite(GREEN_LED, HIGH);
    digitalWrite(RED_LED, LOW);
  } else { // (2) иначе
    StartStateFlag = false; // кнопка небыла отпущена
    analogWrite(pwmPin, 0);
    digitalWrite(GREEN_LED, LOW);
    Serial.println("PWM_OFF");
    pressTime = millis();
  }

  if (!digitalRead(buttonStart)) { //(3) если кнопка не нажата
    analogWrite(pwmPin, 0); //остановка ШИМ
    Serial.println("PWM_OFF");
    digitalWrite(RED_LED, HIGH);
    StartStateFlag = true; //была отпущена и можно входить в условие с нажатой кнопкой (1)
  }
}

И файлы: сам скетч, .elf и .hex для шПротеуса и проект Протеус.
P. S. ШИМ в Протеусе не работает в принципе, в железе все ОК 

BUTTON_TEST.ino

BUTTON_TEST.ino.eightanaloginputs.hex

BUTTON_TEST.ino.elf

BUTTON_TEST.ino.with_bootloader.eightanaloginputs.hex

ButtonTest.pdsprj

Edited by pingyini

Share this post


Link to post
Share on other sites
Guest Guest987

У вас логика хромает. Блоки (2) и (3) программы будут срабатывать всегда, когда кнопка не нажата, а в них флаг становится то тру, то фэлс. Повезёт нажать кнопку, когда тру - сработает блок (1).

Share this post


Link to post
Share on other sites
В 11.02.2019 в 10:04, Гость Guest987 сказал:

У вас логика хромает. Блоки (2) и (3) программы будут срабатывать всегда, когда кнопка не нажата, а в них флаг становится то тру, то фэлс. Повезёт нажать кнопку, когда тру - сработает блок (1).

Увидел, пофиксил, спасибо. Получилось как то так

[code]
  if (digitalRead(buttonStart) && ((millis() - pressTime) <= maxOnTime)) {  // (1) если кнопка старт нажата И нажата менее 7 секунд выполняем:
    analogWrite(pwmPin, power); //запуск ШИМ
    Serial.println("PWM_ON");
    digitalWrite(GREEN_LED, HIGH);
    digitalWrite(RED_LED, LOW);
  } else { // (2) иначе
    analogWrite(pwmPin, 0);
    digitalWrite(GREEN_LED, LOW);
    Serial.println("PWM_OFF");
    
  }

  if (!digitalRead(buttonStart)) { //(3) если кнопка не нажата
    analogWrite(pwmPin, 0); //остановка ШИМ
    Serial.println("PWM_OFF");
    digitalWrite(RED_LED, HIGH);
    pressTime = millis(); //перезапись millis(); и только тогда сможем войти в (1)
    delay(10);
  }

[/code]

 

Share this post


Link to post
Share on other sites

Финальные результаты тестирования литиевых батареек FANSO при нормальных условиях

Перед разработчиком устройства, в котором предполагается использование батарейки, всегда стоит задача выбора того или иного бренда. Конечно, наиболее объективный результат по качеству можно получить при реальном тестировании в режиме работы самого устройства. Для того чтобы у разработчиков была некоторая информация о реальных значениях основных параметров ЛХИТ, инженеры компании КОМПЭЛ решили провести серию из трех тестов. Первый тест на постоянный разряд в нормальных климатических условиях, начатый в апреле 2019 г., мы завершили.

Узнать финальный результат тестирования

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Сергей Фомин
      Изучаю прерывания на attiny13. Пока остановился на прерываниях по переполнению. Сделал тестовый код в Atmel Studio и сразу через программатор заливаю на тиньку со светодиодом. Проблема в том что гореть он должен 10 секунд и выключаться, а горит примерно 20-23 секунды. Прошу помощи в правильном расчёте. Код ниже (пока учусь сильно не ругайтесь) :
      #define F_CPU 1000000 #define LED PB2 #include <avr/io.h> //#include <util/delay.h> #include <avr/interrupt.h> unsigned char work_time =384;    //  1000000/1024/256=3.8  (0.026 сек)    10/0.026=384 volatile unsigned char temp =0; ISR (TIM0_OVF_vect) {      TCNT0=0x00;     temp ++;     if (temp>=work_time)     {         PORTB &=~(1<<LED);  //Инвертируем состояние         TCCR0B=0x00    // остановка таймера         cli (); //общее запрещение прерываний     } } int main (void) {     init();               while (1)     {              } } void init () {          DDRB |= (1<<LED); // выход     PORTB =(1<<LED); //включен     TCCR0B =0x05; // установка делителя на 1024     TIMSK0 |= _BV(TOIE0);     sei();   // Либо SREG |= (1<<SREG_I); //Разрешаем прерывания глобально     TCNT0 = 0X00;        //Обнулить счётный регистр }  
    • By Swah
      Я мало разбираюсь в схемотехнике, но этот Проект на tinyAVR(что ето вообще за древняя штука) хочу сделать на ардуино. Т.к Ардуино у меня есть а  tinyAVR нет.

       Вот ссылка на Word файл. Кто может помочь с скетчем и схемкой.
      https://drive.google.com/file/d/1P5sgOSEaZMXmB6ws-ThD7XMu_FS70FwP/view?usp=sharing

      И подойдет ли просто камера смартфона?
    • By Spyro1313
      Помогите убогому, пожалуйста!
      Проблема: Собрана и проверена схема сигнализации (компилируется и загружается).При введении в схему сигнализации модуля ИК с пультом дистанционного управления, не проходит компиляция. Схема ИК модуля отдельно без изменений из проекта сигнализации - компилируется и загружается (как отдельный проект ) на ура!!!
      При проверки проекта сигнализации с модулем ИК Arduino IDE ВЫДАЕТ ОШИБКУ:
      Arduino: 1.8.9 (Windows 10), Плата:"Arduino/Genuino Uno"
      Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':
      (.text+0x0): multiple definition of `__vector_7'
      libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here
      collect2.exe: error: ld returned 1 exit status
      Несколько библиотек найдено для "IRremote.h"
      Используется: c:\Program Files (x86)\FLProg\ideV3\portable\sketchbook\libraries\IRremote
      Не используется: c:\Program Files (x86)\FLProg\ideV3\libraries\IRremote
      exit status 1
      Ошибка компиляции для платы Arduino/Genuino Uno.
      Этот отчёт будет иметь больше информации с
      включенной опцией Файл -> Настройки ->
      "Показать подробный вывод во время компиляции"
      ==================================================================
      Явно проблема с библиотеками.Не могу разобраться.Что делать?Подскажите...
    • By Macca
      Напривозил много оригинальной электроники
      Имеется большой каталог с микроконтроллерами и расширителями для них.
      Москва. Возможно доставка в другие города. Сергей, физ. лицо, 89776100987
      Можно обращаться в WhatsApp и Telegram по всем вопросам

       
      Малинка:
      Raspberry Pi 3 B+ - 2400руб
      Raspberry Pi 3 А+ - 1700руб
      Sparkfun Набор Raspberry Pi 3 А+, адаптер питания, корпус, microSD 16Гб - 2400руб
      Sparkfun Набор Raspberry Pi zero W, microSD 16 ГБ, HDMI кабель,USB OTG-кабель, адаптер питания - 2500руб
      Vilros Набор Raspberry Pi 3 B+, корпус, адаптер питания, HDMI кабель, microSD 32Гб, картридер, радиаторы - 4200руб
      Sparkfun Набор Raspberry Pi 3 B+, Pi Wedge, FTDI Basic Breakout 3,3 В, Макет Полноразмерный (голый), черный Pi Tin, MicroSD 16 ГБ, картридер, Разноцветные пуговицы (4 шт), Ассорти из светодиодов (20 шт), Резистор 330 Ом 1/6 Вт PTH (20 шт.), Raspberry Pi GPIO Ленточный кабель 40-контактный, USB Mini-B Кабель, адаптер питания, Соединительные провода (10 пакетов), cтандартные проволочные перемычки (30 шт.) - 5200руб
      OddWires Набор Raspberry Pi 3 B+,16 ГБ microSD-карта класса 10, адаптер питания, CP102 USB для последовательного адаптера, Raspberry Pi прозрачный чехол, HDMI кабель, GPIO кабель и коммутационная плата,MCP3008 Микрочип 8-канальный 10-битный АЦП, модуль джойстика, ИК пульт дистанционного управления с батареей, макеты, провода, перемычки, ассорти светодиоды,RGB LED,Пьезо Зуммер Пассивный и Активный, переключатели, резисторы - 5000руб
      Raspberry Pi Infrared Camera Module – 1300руб
      Raspberry Pi Camera module v2 - 1500руб
      Raspberry Pi Touchscreen – 4000руб
      Raspberry Pi UPS Hat - 1100руб
      ReSpeaker 4-микрофонный массив для Raspberry Pi - 1800руб
       
      Ардуино:
      Pro Micro ATmega32U4 3.3В/8МГЦ - 1300руб
      Pro Micro ATmega32U4 5В/16МГЦ - 1300руб
      Arduino Pro Mini 328 3.3В/8МГЦ - 650руб
      Arduino Pro Mini 328 5В/16МГЦ - 650руб
      Arduino Mega 2560 R3 - 2400руб
      Arduino Due - 2700руб
      Arduino Uno Rev3 – 1300руб
      LilyPad Arduino USB - ATmega32U4 Board - 1600руб
      LilyPad Arduino 328 Main Board - 1000руб
      Arduino Fio - 1800руб
      Arduino Mkr1000 - 2300руб
      Arduino Mkr Vidor 4000 - 5000руб
       
      Teensy 3.6 - 2000руб
      Teensy 3.2 - 1300руб
      Teensy 2.0 – 1000pуб
       
      BeagleBone Black rev C – 3200руб
      BeagleBone Black – 2500руб
      BeagleBone Blue – 4500руб
      BeagleBone Pocket – 1600руб
       
      Искусственный интеллект:
      NVIDIA Jetson Nano Developer Kit - 7500руб
      Google Coral Development Board - 9500руб
      NVIDIA Jetson AGX Xavier Module - 45500руб
      NVIDIA Jetson Xavier - 65000руб
      Coral environmental sensor board v 1.0 – 1600руб
      Intel Neural Compute Stick 2 – 7000руб
      Coral Camera CA1 -1600руб
       
      Прочие платы:
      STEMTera (Black) - 2800руб
      Mbed v014.1 - 4000руб
      Mbed v005.1 - 3600руб
      Стартовый набор SparkFun Qwiic для Onion Omega - 9000руб
      LattePanda Alpha 864 – 20000р
      Automic Pi – 2500руб
      Pine H64 “Model B” 3Gb – 2800руб
      Rock64-1G – 1600руб
      Odroid XU4Q – 3000руб
      Adafruit Metro 328 Starter Pack - 2800руб
      Adafruit Trinket M0, for use with CircuitPython & Arduino IDE - 600руб
      Adafruit GEMMA M0, Miniature wearable electronic platform - 650руб
      SparkFun gator:bit v2.0, micro:bit Carrier Board - 1200py6
      micro:bit Board - 900руб
      HackRF One - 19500руб
      LimeSDR Mini - 12500руб
      LimeSDR - 22500руб
      bladeRF 2.0 micro xA4 - 31000руб
      SparkFun PicoBoard - 3000руб
      SparkFun Stepoko - 10000руб

      Лидары и камеры:
      Raspberry Pi Camera module v2 - 1500руб
      Pixy2 CMUcam5 - 3600руб
      CMOS Camera Module - 2000руб
      OpenMV m7 - 4500руб
      IR Array Breakout, 55 Degree FOV, MLX90640 (Qwiic) - 4500руб
       
      Набор FLIR Радиометрический Lepton Dev - 13000руб
      +PureThermal 2 интеллектуальная плата ввода / вывода FLIR Lepton Smart - 6000руб
       
      RPLidar A2M8 360градусов Laser Range Scanner – 20000руб
      RPLidar A3M1 360градусов Laser Range Scanner – 38000руб
      TFMini – Micro Lidar Module – 2500руб

       
      Расширители:
      Thing Plus ESP32 WROOM - 1400руб
      ESP8266 Thing Dev Board - 1100руб
      WiFi Module ESP8266 - 450руб
      Adafruit Feather HUZZAH with ESP8266 Loose Headers - 1100руб
       
      SparkFun GPS Logger Shield – 3300руб
      GPS Mouse GP-808G (72 Channel) – 2500руб
      SparkFun Venus GPS with SMA Connector – 3300руб
      SparkFun GPS-RTK Board, NEO-M8P-2 (Qwiic) - 13000руб
      Adafruit Ultimate GPS Breakout - 66 channel w/10 Hz updates Version 3 - 2600руб      
       
      CAN-BUS Shield – 1700руб
      Bus Pirate v3.6 1700руб, с кабелем – 2000руб
      Wireless Motor Driver Shield - 1800руб
      microSD Shield - 1000руб
      Vernier Interface Shield - 1600руб
      MP3 Player Shield - 1800руб
      Weather Shield - 2600руб
      Monster Moto Shield - 4700руб
      EasyVR Shield 3.0 Для распознавания голоса – 3300руб
      XBee Shield — 1000руб
      OpenLog - 1000руб
      Sound Detector (с ножками) — 750руб
      EasyDriver - Stepper Motor Driver – 1000руб
      Big Easy Driver — 1300руб
      URM37 V5.0 Ультразвуковой датчик для Arduino/RaspberryPi - 950руб
      URM04 Ультразвуковой датчик (RS485) - 1700руб
      2x1A моторный щит постоянного тока для Arduino 650руб
      Винтовой щит для Arduino - 500руб
      Набор беспроводных джойстиков  - 2500руб
      Усилитель тензодатчика SparkFun HX711 - 650руб
      SparkFun Simultaneous RFID Reader, M6E Nano  - 13000p
      SparkFun RS232 Shifter SMD - 1000руб
      Pro nRF52840 Mini, Bluetooth Development Board - 2000руб
      THAT 1646 OutSmarts Breakout - 1000руб
      RedBoard Turbo, SAMD21 Development Board - 1650руб
      SparkFun Barometric Pressure Sensor Breakout, MPL115A1  - 900руб
      Little Soundie Audio Player - 1000руб
      XBee Explorer Serial - 1300руб
      Music Instrument Shield - 2100руб
      SparkFun Environmental Combo Breakout, CCS811/BME280 (Qwiic) - 2300руб
      PN532 NFC/RFID controller breakout board v1.6 - 2400руб
      Adafruit Motor/Stepper/Servo Shield for Arduino v2 Kit – v2.3 - 1300руб
      Adafruit 9-DOF Absolute Orientation IMU Fusion Breakout, BNO055 - 2300руб




    • By STmaster23
      Добрый день, дорогие читатели.

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

      Устройство может измерять температуру и влажность, имеет 2 независимых реле которые коммутируют сеть 220 В на две независимых розетки (розетка влажности и розетка температуры).
      В ручном режиме, с помощью кнопок устанавливаются пределы включения и отключения реле, установленные пределы записываются в энергонезависимую память ARDUINO, и при перезапуске устройства, выставленные вами настройки восстанавливаются.

      При попытке поисков в интернете готовых устройств такого рода, я натыкался на огромные цены, из-за этого меня посетила мысль сделать такое устройство на базе Arduino.

      В основе устройства - Arduino NANO. Коммутация производится с помощью 2-х модулей реле для Ардуино с опторазвязкой. Управление выполняется с помощью самодельной клавиатуры на 5 кнопок. Для отображения информации с датчика и настроек используется LCD дисплей 16х2, подключенный по шине I2C к Ардуино. В качестве датчика температуры и влажности применен модуль SHT-31D.
      Все модули были заказаны на Aliexpress, из-за чего стоимость устройства значительно уменьшилась, чем если бы эти модули покупались в местных магазинах.

      В корпус было решено делать из распределительной коробки для электропроводки, потому как материал из которого сделана коробка, хорошо поддается проделывания всяческих отверстий с помощью подручных средств. Внутри я смонтировал две розетки, для подключения устройств, которые будет воздействовать на температуру и влажность т.е. холодильник и вентилятор. Дополнительно в корпусе были установлены двойной выключатель 220 В для отключения питания розеток. И выключатель блока питания на 5 В, для питания Ардуино и всех его модулей.

      И уже после окончательной сборки были ещё добавлены две индикаторные лампы на 220 В, для визуализации наличия напряжения в розетках.

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

      Датчик сделан выносной на проводе от какого то USB устройства, потому что датчик подключается по шине I2C, соответственно USB шнур с 4-мя провода пришелся как никогда кстати.

      Вот так выглядит устройство, уже в готовом виде...


×
×
  • Create New...