Многоцелевая платформа (аналог Arduino)


В данной статье представлю опыт разработки многоцелевой платформы, аналогичной Arduino. Разработка платформы обеспечивала достижение следующих целей:
1. освоение редактора EAGLE CAD.
2. подготовка проекта к производству (учет особенностей при трассировке)
3. опыт монтажа компонентов.
4. вывод — наличие платформы с качествами Arduino и приятными дополнениями.

Состав платформы выбран следующий:
1. микроконтроллер Atmega48/8/168/328

2. линейный интегральный стабилизатор 7805

3. микросхема-календарь PCF8583P

4. драйвер двигателей L293D

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

Общий вид трассированной схемы.

Плата в сборе

Программируется микроконтроллер через разъем ISP.

Репозиторий с проектом
https://[email protected]/GlepFingerman/baseatmelboard.git
Репозиторий библиотеки для микросхемы PCF8583P
[email protected]:edebill/PCF8583.git

// Тестовый код управления платой
#include <Arduino.h>
#include <Wire.h>
#include <stdio.h>
#include <SoftwareSerial.h>
#include "PCF8583.h"
#include "DFPlayer_Mini_Mp3.h"
// директивы обозначения цифровых выводов управления двигателями
#define ML1 (PD7)
#define MR1 (PD5)
#define ML2 (PD6)
#define MR2 (PD4)
//директивы обозначения цифровых выводов для установленных кнопок
#define BT1 (PC3)
#define BT2 (PC2)
// директива обозначения вывода подключения температурного датчика
#define Tmp (PC0)
//
int correct_address = 0;
PCF8583 p (0xA0);

// движение вперед
void forward()
{
//
digitalWrite(ML1, HIGH);
digitalWrite(MR1, LOW);
//
digitalWrite(ML2, HIGH);
digitalWrite(MR2, LOW);
}
// поворот влево
void toLeft()
{
//
digitalWrite(ML1, LOW);
digitalWrite(MR1, HIGH);
//
digitalWrite(ML2, HIGH);
digitalWrite(MR2, LOW);
}
// поворот вправо
void toRigth()
{
//
digitalWrite(ML1, HIGH);
digitalWrite(MR1, LOW);
//
digitalWrite(ML2, LOW);
digitalWrite(MR2, HIGH);
}
// движение назад
void backward()
{
//
digitalWrite(ML1, LOW);
digitalWrite(MR1, HIGH);
//
digitalWrite(ML2, LOW);
digitalWrite(MR2, HIGH);
}

void Setup()
{
// активируем последовательный порт
Serial.begin(9600);
// выводим тестовое сообщение
Serial.print("booting...");
Serial.println(" done");
// устанавливаем режим работы цифровых выводов управления двигателями на "выход"
pinMode(ML1, OUTPUT);
pinMode(MR1, OUTPUT);
pinMode(ML2, OUTPUT);
pinMode(MR2, OUTPUT);
//
mp3_set_serial (Serial);
mp3_set_volume (25);
delay (100);
mp3_play ();
delay (100);
}

void loop()
{
forward();
// настройка часов по последовательному порту
if(Serial.available() > 0){
       p.year = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48)) + 2000;
       p.month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.day = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48));

       if(Serial.read() == ';'){
         Serial.println("setting date");
	 p.set_time();
       }
// получение даты/времени от PCF8583P
p.get_time();
char time[50];
sprintf(time, "%02d/%02d/%02d %02d:%02d:%02d", p.year, p.month, p.day, p.hour, p.minute, p.second);
Serial.println(time);
// чтение АЦП (термодатчик LM35CZ)
double tempC =  analogRead(Tmp);
// вывод в терминал температуры
Serial.print("Temp C = ");
Serial.println(tempC, DEC);
}

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение